1

I am trying to retrieve values from my firebase database.

It is displaying the values in onDataChange() function but unable to display the values out of it .

Code:

public Records readtraditional(String email)
{
    final Records record = new Records();
    final String[] name = new String[1];

    myRef.child(email).child("name").addValueEventListener(new 
    ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            name[0] = dataSnapshot.getValue().toString() ;
        //Printing value of name here
        }
        @Override
        public void onCancelled(DatabaseError databaseError) {
        }
    });

    Log.i("name in ","H"+name[0]);
    //Unable to print value of name here
    record.setName(name[0]);
    return record;
}
Phantômaxx
  • 37,901
  • 21
  • 84
  • 115

1 Answers1

1

As I mentioned in my comment call to Firebase is asynchronous. If you want your method to return Records object you should use callback:

public void readtraditional(String email, MyCallback callback)
{
    final Records record = new Records();
    final String[] name = new String[1];

    myRef.child(email).child("name").addValueEventListener(new 
    ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            name[0] = dataSnapshot.getValue().toString() ;                
            record.setName(name[0]);
            callback.onSuccess(record)
        }
        @Override
        public void onCancelled(DatabaseError databaseError) {
        }
    });   

}

Interface:

public interface MyCallback{
           void onSuccess(Records record)
}

And you can call this method like this:

readtraditional(mystring,new MyCallback{
        @Override
        void onSuccess(Records record){
            //do whatever you want
        }
});
matip
  • 794
  • 3
  • 7
  • 27