0

My Database如何從Firebase數據庫獲取所有子節點列表值?

所以這就是我的數據庫的樣子。每個用戶都可以添加存儲在用戶名/我的播放器/路徑作爲地圖<「最佳球員」,他的3名最好的球員,玩家>,因爲它是如下所示:

List<String> list = new ArrayList<>(); 
    list.add(first.getText().toString()); 
    list.add(second.getText().toString()); 
    list.add(third.getText().toString()); 
    Players players = new Players(list); 

    Map<String, Object> map = new HashMap<>(); 
    map.put("Best Players", players); 

    FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser(); 
    FirebaseDatabase database = FirebaseDatabase.getInstance(); 
    if (user != null) { 
     DatabaseReference myRef = database.getReference().child("Users").child(user.getUid()).child("My Players"); 
     myRef.setValue(map); 
    } 

Player對象包含ArrayList中有3個String對象。因此,我想要查看數據庫中的所有用戶,並從他的最佳球員列表中搜索每個用戶的第0或第1或第2個玩家。任何建議如何做到這一點?

+0

,做你想要什麼,以與那些清單?你想在「ListView」中顯示它們嗎? –

+0

是的,這個想法是,第0個元素將是用戶的最佳球員,所以例如我想顯示所有的第0個元素,所以我可以看到誰是所有用戶中最好的球員 – joe

回答

1

爲了顯示這些列表,請使用此代碼:

ListView listView = (ListView) findViewById(R.id.list_view); 
ArrayList arrayList = new ArrayList<>(); 

DatabaseReference ref = FirebaseDatabase.getInstance().getReference().child("Users").child(userId).child("My Players").child("Best Players").child("list"); 
ValueEventListener eventListener = new ValueEventListener() { 
@Override 
public void onDataChange(DataSnapshot dataSnapshot) { 
    @SuppressWarnings("unchecked") 
    Map<String, Object> map = (Map<String, Object>) dataSnapshot.getValue(); 
    String firstList = (String) map.get("0"); 
    String secondList = (String) map.get("1"); 
    String thirdList = (String) map.get("2"); 
    arrayList.add(firstList + ", " + secondList + ", " + thirdList); 

    arrayAdapter = new ArrayAdapter<>(this, R.layout.list, arrayList); 
    listView.setAdapter(arrayAdapter); 
} 

@Override 
public void onCancelled(DatabaseError databaseError) {} 
}; 
ref.addListenerForSingleValueEvent(eventListener); 
+0

不工作,我得到這個錯誤:com。 google.firebase.database.DatabaseException:序列化Collections不受支持,請使用Lists代替 – joe

+0

請更改爲您將數據添加到Firebase數據庫的模式。 'map.put(「最佳玩家」,玩家);'是錯誤的,因爲'players'是一個'ArrayList'而不是'Map'。用'map'改變'list'。將解決你的問題。 –

+0

它幫助!但我仍然只從登錄的用戶獲取數據。因爲我必須將userId放在數據庫路徑中。是否有辦法繞過它並獲取所有用戶的數據? – joe

0

可以使用代碼如下:更改參數,按您的數據庫

databaseReference.child(Table_Dashboard).orderByChild("title").addValueEventListener(new ValueEventListener() { 

     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      spin = new ArrayList<String>(); 
      // spin.add("Dashboard"); 


      for (DataSnapshot spinnerSnapshot : dataSnapshot.getChildren()) { 
       String areaName = spinnerSnapshot.child("title").getValue(String.class); 
       spin.add(areaName); 


      } 

      // spin.remove("Family Details"); 

      ArrayAdapter<String> spinnerAdapter = new ArrayAdapter<String>(Dashboard.this, android.R.layout.simple_spinner_item, 
        spin); 
      spinnerAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 

      spinner.setAdapter(spinnerAdapter); 
      dismissprogress(); 
     } 


     @Override 
     public void onCancelled(DatabaseError databaseError) { 
      dismissprogress(); 
     } 
    }); 
相關問題