如何获取ListView - Firebase数据库中的所有子数据

时间:2017-07-27 00:31:10

标签: android listview firebase firebase-realtime-database

image description here

我需要获取Childs中的所有数据并在ListView中显示它

孩子们的每一个价值观!,主要的孩子是“XXX-用户”,其他孩子是关于“模型电话”,我想在ListView上获得这个孩子的所有日期

这是我的活动:

public class xxxxxxx extends AppCompatActivity {ListView listView;
ArrayList<String> usernames = new ArrayList<>() ;
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference myRef = database.getReference("xxx-Users");


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.xxxxxxxxxxxxx);





    listView = (ListView) findViewById(R.id.listview00);
    final ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,usernames);
    listView.setAdapter(arrayAdapter);

    myRef.addChildEventListener(new ChildEventListener() {
        @Override
        public void onChildAdded(DataSnapshot dataSnapshot, String s) {

            String  value = dataSnapshot.getValue(String.class);
            usernames.add(value);
            arrayAdapter.notifyDataSetChanged();


        }

        @Override
        public void onChildChanged(DataSnapshot dataSnapshot, String s) {

        }

        @Override
        public void onChildRemoved(DataSnapshot dataSnapshot) {

        }

        @Override
        public void onChildMoved(DataSnapshot dataSnapshot, String s) {

        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });

}`**

我的布局

<ListView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:layout_alignParentTop="true"
    android:id="@+id/listview00" />

1 个答案:

答案 0 :(得分:0)

正如cricket_007所说,您的代码与您的数据结构不符。您的侦听器将立即触发xxx-Users下的节点。但是您的实际网址值更深一层。

处理此问题的一种简单方法是在onChildAdded()中循环遍历这些嵌套子项:

DatabaseReference myRef = database.getReference("xxx-Users");
myRef.addChildEventListener(new ChildEventListener() {
    @Override
    public void onChildAdded(DataSnapshot dataSnapshot, String s) {
      for (DataSnapshot childSnapshot: dataSnapshot.getChildren()) {
        String  value = childSnapshot.getValue(String.class);
        usernames.add(value);
      }
      arrayAdapter.notifyDataSetChanged();
    }
    ...