0

My DatabaseFirebaseデータベースからすべての子ノードリストの値を取得する方法は?

これは私のデータベースの様子です。それがここに示されているように、各ユーザーには>、プレイヤーを地図としてユーザーID /マイプレーヤー/パス<「ベストプレーヤー」に格納されている彼の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オブジェクトは3つのStringオブジェクトでのArrayListが含まれています。だから、私はデータベースのすべてのユーザーを通過して、各ユーザーの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

動作しません。 google.firebase.database.DatabaseException:コレクションのシリアライズはサポートされていません。代わりにリストを使用してください – joe

+0

Firebaseデータベースにデータを追加するモードに変更してください。 'players'は' ArrayList'であり 'Map'ではないので、map.put(" Best Players "、players);は間違っています。 'list'を' map'で変更してください。あなたの問題を解決します。 –

+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(); 
     } 
    }); 
関連する問題