jreft56
jreft56

Reputation: 199

Firebase OnDataChange

I have a DialogFragment and would like to store data from a specific position from Firebase Database in an ArrayList (variable arrList). I set a value event listener and receive data as DataSnaphsot (I don't want to use REST) in my onStart() method:

@Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            for(DataSnapshot data : dataSnapshot.getChildren()){
                Log.d("onDataChange", data.getValue().toString());
                arrList.add(data.getValue().toString());
            }
        }
Log.d("onStart", arrList.toString());

I also have two Log.d's which should print the content of ArrayList:

one in onStart() (see above) one in onDetach()

 @Override
public void onDetach() {
    super.onDetach();
    Log.d("onDetach", arrList.toString());
}

Results:

D/onStart: [] 
D/onDataChange: name
D/onDataChange: surname
...
D/onDetach: [name, surname, ...]

How to fill the ArrayList so that it is available in onStart() ?

Upvotes: 0

Views: 783

Answers (1)

Mohammed Junaid
Mohammed Junaid

Reputation: 1412

Th listener methods of firebase runs asynchronously try putting your log of onStart inside onDataChange method like this

@Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for(DataSnapshot data : dataSnapshot.getChildren()){
            Log.d("onDataChange", data.getValue().toString());
            arrList.add(data.getValue().toString());
        }
        Log.d("onStart", arrList.toString());
    }

Upvotes: 1

Related Questions