2017-07-06 13 views
1

リストビューで単一の子の詳細を取得できますが、firebaseデータベースからすべての子を取得することはできません。私は子供に直接アクセスしたいです。ここでリアルタイムのデータベースfirebaseからシングルリストビューで同時にすべての子の詳細を取得する方法

は私のコードは

database pic

emulator pic

public class ViewDatabase extends AppCompatActivity { 
private static final String TAG = "ViewDatabase"; 
private DatabaseReference databaseReference; 
private ListView mListView; 
@Override 
protected void onCreate(@Nullable Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
    setContentView(R.layout.view_database_layout); 
mListView = (ListView) findViewById(R.id.listview); 
    databaseReference = 
FirebaseDatabase.getInstance().getReference().child("hello"); 
databaseReference.addValueEventListener(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      showData(dataSnapshot); 
     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 

     } 
    }); 

    } 
private void showData(DataSnapshot dataSnapshot) { 
    for (DataSnapshot snapshot : dataSnapshot.getChildren()) { 

     userinfo user = snapshot.getValue(userinfo.class); 

     Log.d(TAG, "showData: name: " + user.getName()); 
     Log.d(TAG, "showData: Mobile: " + user.getMob()); 
     Log.d(TAG, "showData: Vehicle: " + user.getVehicle()); 
     Log.d(TAG, "showData: Address: " + user.getaddress()); 

     ArrayList<String> array = new ArrayList<>(); 
     array.add(user.getName()); 
     array.add(user.getMob()); 
     array.add(user.getVehicle()); 
     array.add(user.getaddress()); 
     ArrayAdapter adapter = new ArrayAdapter(this, 
    android.R.layout.simple_list_item_1, array); 
     mListView.setAdapter(adapter); 
    } 

    } 
} 

答えて

1

問題は、新しいアレイとアダプタを作成しているということですスナップショット内のすべてのアイテムに対してあなただけの、一度だけの配列を作成し、それにすべての項目を追加し、配列からアダプタを作成する必要があります。これにより

private void showData(DataSnapshot dataSnapshot) { 
    ArrayList<String> array = new ArrayList<>(); 
    for (DataSnapshot snapshot : dataSnapshot.getChildren()) { 
     userinfo user = snapshot.getValue(userinfo.class); 

     array.add(user.getName()); 
     array.add(user.getMob()); 
     array.add(user.getVehicle()); 
     array.add(user.getaddress()); 
    } 
    ArrayAdapter adapter = new ArrayAdapter(this, 
android.R.layout.simple_list_item_1, array); 
    mListView.setAdapter(adapter); 
    } 
} 

をあなたがそれぞれの子ノードのリストビュー内の4つの項目になってしまいますデータベース。これは技術的には機能しますが、おそらくあなたが望むものではありません。より一般的な表現は、すべてのユーザーのための配列に単一の項目を追加するために、次のようになります。

private void showData(DataSnapshot dataSnapshot) { 
    ArrayList<String> array = new ArrayList<>(); 
    for (DataSnapshot snapshot : dataSnapshot.getChildren()) { 
     userinfo user = snapshot.getValue(userinfo.class); 

     array.add(user.getName()+" ("+user.getMob()+")\n"+user.getVehicle()+"\n"user.getaddress()); 
    } 
    ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, array); 
    mListView.setAdapter(adapter); 
    } 
} 

私もFirebaseListAdapterとのための独自のアダプタを作成するための必要性を奪う他のクラスを持っている、FirebaseUIに探してお勧めします一般的なケース。

+0

よろしくお願いします – puru

0

でこのコードを使用してください:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference(); 
DatabaseReference helloRef = rootRef.child("hello"); 
ValueEventListener eventListener = new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     ArrayList<String> array = new ArrayList<>(); 
     for(DataSnapshot ds : dataSnapshot.getChildren()) { 
      String address = ds.child("address").getValue(String.class); 
      String mob = ds.child("mob").getValue(String.class); 
      String name = ds.child("name").getValue(String.class); 
      String vehicle = ds.child("vehicle").getValue(String.class); 
      array.add(address + "/" + mob + "/" + name + "/" + vehicle); 
      Log.d("TAG", address + "/" + mob + "/" + name + "/" + vehicle); 
     } 
     ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, array); 
     mListView.setAdapter(adapter); 
    } 

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

何も起こらない私はこのためにアレイアダプターを使用する必要があります – puru

+0

私の更新された答えをご覧ください。 –

+0

なぜあなたはString .class – puru

関連する問題