2017-06-06 161 views
0

我一直試圖在過去5天內從我的Firebase數據庫檢索數據字段,但沒有取得任何成功。這是我的數據庫看起來像:無法從Firebase數據庫中檢索數據字段

enter image description here

代碼獲取數據:

private void alterTextView(final String id) { 
     if(id!=null) { 
     mDatabase.child("Users").child(id).addValueEventListener(new ValueEventListener() { 
      @Override 
      public void onDataChange(DataSnapshot dataSnapshot) { 
       UserInformation userInformation = dataSnapshot.getValue(UserInformation.class); 
       String name = (String) userInformation.getName(); 


       Log.d("Main Activity",name); 
      } 

      @Override 
      public void onCancelled(DatabaseError databaseError) { 

      } 
     }); 
     mWelcomeUserMessage.setText("Welcome, "+name); 

    } 
}` 

我不知道爲什麼名字是「空」(參見日誌)。 有人能告訴我我做錯了什麼嗎?

PS:我在我的UserInformation.java類中定義了一個空白的默認構造函數,getters和setters。

另外,mDatabase被初始化爲如下: mDatabase = FirebaseDatabase.getInstance().getReference();

+0

你能過去這裏的.toString()你的dataSnapshot? –

+0

我不明白..我沒有.toString()爲我的dataSnapshot。 我認爲getValue()就足夠了? –

+0

它將打印一個帶有鍵和值的json。 Log.d(TAG,「收到的數據:」+ dataSnapshot.toString()); –

回答

1

dataSnapshot.getValue(Class)只會負荷和設定值到公共字段。我看到你已經有一個默認的構造函數。

在UserInformation class public中創建名稱字段。另外請確保您調用getValue的快照是UserInformation類的有效JSON表示並具有完全相同的「名稱」字段(它必須完全匹配類中的名稱字段)。

請注意: addValueEventListener添加了一個偵聽器,當數據可用時將會調用該偵聽器。

請注意,在調用onDataChange後數據可用。這就是爲什麼你應該從DataSnapshot獲得所需數據後立即設置文本。像這樣:

private void alterTextView(final String id) { 
      if(id!=null) { 
      mDatabase.child("Users").child(id).addValueEventListener(new ValueEventListener() { 
       @Override 
       public void onDataChange(DataSnapshot dataSnapshot) { 
        UserInformation userInformation = dataSnapshot.getValue(UserInformation.class); 
        String name = (String) userInformation.getName(); 
        Log.d("Main Activity",name); 
        runOnUiThread(new Runnable() { 
         @Override 
         public void run(){ 
          mWelcomeUserMessage.setText("Welcome, "+name); 
         } 
        }); 
       } 

       @Override 
       public void onCancelled(DatabaseError databaseError) { 

       } 
      }); 

     } 
    } 
+0

我做到了。現在,當我嘗試使用dataSnapshot.toString()方法顯示類時,沒有問題。但是,當我嘗試設置我的文本視圖的文本時,它仍然是空白的。我使用常規的getter方法來獲取名稱。 –

+0

@Yash請提供一些代碼。您可能會在onDataChange方法中設置TextView的文本。你不能這樣做,因爲它是異步調用的。 –

+0

我在最近更新的問題中提供了代碼。它仍然顯示爲空 –