2017-10-09 160 views
1

我試圖從我的Firebase數據庫檢索值。無法從Firebase數據庫檢索值

它正在onDataChange()函數中顯示值,但無法將值顯示出來。

代碼:

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; 
} 
+1

從火力地堡響應是異步。當您嘗試之外OnDataChange可能是你還沒有得到服務器的響應和你的名字陣列仍然是空的,onDataChange被稱爲後 – matip

+0

@matip打印值,我知道這一點,但如何解決。 –

+0

看到我的回答如下 – matip

回答

0

正如我在我的評論呼叫提到火力地堡是異步的。如果你希望你的方法返回Records對象中要使用的回調:

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) { 
     } 
    }); 

} 

接口:

public interface MyCallback{ 
      void onSuccess(Records record) 
} 

你可以調用這個方法是這樣的:

readtraditional(mystring,new MyCallback{ 
     @Override 
     void onSuccess(Records record){ 
      //do whatever you want 
     } 
}); 
相關問題