2016-06-24 52 views
0

我的火力數據庫看起來是這樣的:由子值獲取對象

{ 
    "users": { 
      "-KL2IIz4jasq1kjdM-LA": { 
       "id": "12345", 
       "name": "peter", 
       "email": "[email protected]" 
      } 
      "-KL2Idasdsf34kjdM-LA": { 
       "id": "45356", 
       "name": "joe", 
       "email": "[email protected]" 
      } 
    } 
} 

現在我需要他的ID「45356」讓Joe。我怎樣才能存檔這個?

我只能在此刻

回答

2
mDatabase.child("users").orderByChild("id").equalTo("45356").addListenerForSingleValueEvent(
    new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      for (DataSnapshot userSnapshot: dataSnapshot.getChildren()) { 
       //data will be available on userSnapshot.getValue(); 
      } 
     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 
      Log.w(TAG, "error:", databaseError.toException()); 
     } 
}); 
3

讓他通過他的$用戶id「-KL2Idasdsf34kjdM-LA」雖然@ adolfosrs的答案的作品,我建議改變你的數據結構。如果您的用戶擁有自然ID,則應該使用該ID存儲它們。

{ 
    "users": { 
     "12345": { 
      "name": "peter", 
      "email": "[email protected]" 
     } 
     "45356": { 
      "name": "joe", 
      "email": "[email protected]" 
     } 
    } 
} 

這使得用(固定性能)直接查找加載它們:

mDatabase.child("users").child("45356").addListenerForSingleValueEvent(
    new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      //data will be available on dataSnapshot.getValue(); 
     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 
      Log.w(TAG, "error:", databaseError.toException()); 
     } 
}); 

這將有一個固定的性能,不管你有多少用戶。隨着用戶數量的增加,查詢速度會變慢,因此會影響可伸縮性。