2017-03-28 160 views
1

我在從Firebase檢索數據時遇到問題。我有一個root用戶的節點,然後在那個根內有一個userID子節點。在該子節點內,我根據其血型存儲用戶信息。如何從Firebase檢索數據和特定用戶數據

現在,我想要的是根據血型取名和電子郵件,說取血型爲B +的所有用戶數據。

此外,請告訴我如何獲取firebase中的所有條目並顯示在textView上。

//show data on text view 
    datashow.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Log.i("inside click", "onClick: "); 
      FirebaseDatabase database = FirebaseDatabase.getInstance(); 
      DatabaseReference db = database.getReference(); 
      db.child("users").addValueEventListener(new ValueEventListener() { 
       @Override 
       public void onDataChange(DataSnapshot dataSnapshot) { 
        User user = dataSnapshot.getValue(User.class); 
        if (user == null) { 
         Log.e(TAG, "User data is null!"); 
         return; 
        } 
        Iterable<DataSnapshot > children = dataSnapshot.getChildren(); 
        Log.i("children", "onDataChange: " + children); 
        for(DataSnapshot child : children) 
        { 
         Map<String , String> map = (Map)child.getValue(); 
         Log.i("inside", "onDataChange: " + map); 
         name = map.get("name"); 
         email = map.get("email"); 
         dateof = map.get("userDob"); 
         showData(name , email , dateof); 
         Log.i("datasnap", "onDataChange: data snapshot " + name + email + dateof); 
        } 
       } 

       @Override 
       public void onCancelled(DatabaseError databaseError) { 

       } 
      }); 
     } 
    }); 

這是我的火力地堡數據庫快照

enter image description here

+0

只需點擊「在這裏輸入的形象描述」,你會看到火力數據的快照 –

+0

你已經包括了一個鏈接到JSON樹在你的問題的照片。請用實際的JSON替換爲文本,您可以通過單擊[您的Firebase數據庫控制檯](https://console.firebase.google.com/project/_/database/data/)中的導出JSON鏈接輕鬆獲取該文本。 。將JSON作爲文本使其可以被搜索到,使我們能夠輕鬆地使用它來測試您的實際數據並將其用於我們的答案中,並且通常只是[一件好事](https://meta.stackoverflow.com/問題/ 285551 /爲什麼-MAY-I-沒有上傳圖像-的代碼上那麼當灰化-A-問題/ 285557#285557)。 –

+1

@FrankvanPuffelen謝謝你的回答,我肯定會在我的問題中加入Json樹 –

回答

0
db.child("users").orderByChild("userBloodGroup").equalTo("B+").addValueEventListener(new ValueEventListener() { 
       @Override 
       public void onDataChange(DataSnapshot snapshot) { 
      List<User> data = new ArrayList<>(); 
        if (dataSnapshot.exists()) { 
       for (DataSnapshot snapshot : 
         dataSnapshot.getChildren()) { 
        User element = snapshot.getValue(User.class); 
        element.setKey(snapshot.getKey()); 
        data.add(element); 

       } 
      for (User user: data){ 
Log.i(TAG,"user name: " +user.getName()); 
    Log.i(TAG,"user email: " +user.getEmail()); 
    Log.i(TAG,"user dob: " +user.getUserDob()); 
} 
       } 
     @Override 
     public void onCancelled(DatabaseError databaseError) { 
      Log.i(TAG, "loadPost:onCancelled", databaseError.toException()); 
     } 

    }); 
+0

感謝你的回答,它真的幫了我 –

+0

感謝@Rihab爲你的答案,但它有一個問題的方法'公共無效onDataChange'沒有回報鍵入你仍然返回列表「數據」這是給錯誤,我有「空」作爲值在日誌中,當我調試應用程序的「userBloodGroup」顯示空值 –

+0

@rajatsingh我已經更新了答案,我希望它現在可以工作:))不要忘記將getters nd setter添加到您的用戶實體 – Rihab

1

要查詢與bloodGroup B +的所有用戶,使用火力地堡查詢:

firebaseReference("users").orderByChild("userBloodGroup").equalTo("B+") 

要獲得所有用戶的數據,你可以使用一個Listener來獲取所有這些數據,並將它們放入你需要的任何TextView中。您可以查看Firebase上關於他們如何讀取數據的文檔。 https://firebase.google.com/docs/database/android/read-and-write

相關問題