Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将从Firebase检索到的数据一次性存储在ArrayList中?_Java_Android_Arraylist_Firebase_Firebase Realtime Database - Fatal编程技术网

Java 如何将从Firebase检索到的数据一次性存储在ArrayList中?

Java 如何将从Firebase检索到的数据一次性存储在ArrayList中?,java,android,arraylist,firebase,firebase-realtime-database,Java,Android,Arraylist,Firebase,Firebase Realtime Database,我在数据库中的同一引用下有一些数据,我正试图将其存储在ArrayList中 以下是方法: mDatabase.child("child").child(uid).addChildEventListener(new ChildEventListener() { @Override public void onChildAdded(DataSnapshot dataSnapshot, String s) { if (dataSnaps

我在数据库中的同一引用下有一些数据,我正试图将其存储在ArrayList中

以下是方法:

    mDatabase.child("child").child(uid).addChildEventListener(new ChildEventListener() {
        @Override
        public void onChildAdded(DataSnapshot dataSnapshot, String s) {

            if (dataSnapshot.getValue() != null){
               ids.add(dataSnapshot.getValue().toString());
               Log.d("ids", ids.toString());
            } else {
                Toast.makeText(getBaseContext(), "No data!", Toast.LENGTH_SHORT).show();
            }

        }
        ...
        ...
    });
引用mDatabase.childchild.childuid。。。其中存储了2个密钥,它们一个接一个地存储在ids中,如下所示:

D/ids: [-Kayr_ENTy4QZQKn3Bgx]
D/ids: [-Kayr_ENTy4QZQKn3Bgx, -KaywN_5pTOrB0ooBIC3]
-app
  -child
    -uid
      -1484967071: -Kayr_ENTy4QZQKn3Bgx
      -1484967222: -KaywN_5pTOrB0ooBIC3
@Override
public void onDataChange(DataSnapshot snapshot) {
    ArrayList<String> ids = new ArrayList<String>();
    for (DataSnapshot childSnapshot: snapshot.getChildren()) {
        ids.add(childSnapshot.getValue().toString());
    }
}
我想知道的是如何让它们一次添加到ids中,而不是逐个添加

更新1:-

数据结构是这样的:

D/ids: [-Kayr_ENTy4QZQKn3Bgx]
D/ids: [-Kayr_ENTy4QZQKn3Bgx, -KaywN_5pTOrB0ooBIC3]
-app
  -child
    -uid
      -1484967071: -Kayr_ENTy4QZQKn3Bgx
      -1484967222: -KaywN_5pTOrB0ooBIC3
@Override
public void onDataChange(DataSnapshot snapshot) {
    ArrayList<String> ids = new ArrayList<String>();
    for (DataSnapshot childSnapshot: snapshot.getChildren()) {
        ids.add(childSnapshot.getValue().toString());
    }
}
按照的建议,使用valueEventListener会导致检索到以下内容:

D/ids: [{1484967222=-KaywN_5pTOrB0ooBIC3, 1484967071=-Kayr_ENTy4QZQKn3Bgx}]

虽然我只需要键-KaywN_5pTOrB0ooBIC3和-Kayr_ENTy4QZQKn3Bgx。

如果希望将整个快照交付给侦听器,请使用或

如果使用addValueEventListener,将使用初始快照调用侦听器,如果数据库发生更改,将再次调用侦听器

如果使用addListenerForSingleValueEvent,则在初始快照中只调用一次侦听器

侦听器接收到的快照将包括所有子项。要迭代它们,您可以执行以下操作:

D/ids: [-Kayr_ENTy4QZQKn3Bgx]
D/ids: [-Kayr_ENTy4QZQKn3Bgx, -KaywN_5pTOrB0ooBIC3]
-app
  -child
    -uid
      -1484967071: -Kayr_ENTy4QZQKn3Bgx
      -1484967222: -KaywN_5pTOrB0ooBIC3
@Override
public void onDataChange(DataSnapshot snapshot) {
    ArrayList<String> ids = new ArrayList<String>();
    for (DataSnapshot childSnapshot: snapshot.getChildren()) {
        ids.add(childSnapshot.getValue().toString());
    }
}

如果希望将整个快照传递给侦听器,请使用或

如果使用addValueEventListener,将使用初始快照调用侦听器,如果数据库发生更改,将再次调用侦听器

如果使用addListenerForSingleValueEvent,则在初始快照中只调用一次侦听器

侦听器接收到的快照将包括所有子项。要迭代它们,您可以执行以下操作:

D/ids: [-Kayr_ENTy4QZQKn3Bgx]
D/ids: [-Kayr_ENTy4QZQKn3Bgx, -KaywN_5pTOrB0ooBIC3]
-app
  -child
    -uid
      -1484967071: -Kayr_ENTy4QZQKn3Bgx
      -1484967222: -KaywN_5pTOrB0ooBIC3
@Override
public void onDataChange(DataSnapshot snapshot) {
    ArrayList<String> ids = new ArrayList<String>();
    for (DataSnapshot childSnapshot: snapshot.getChildren()) {
        ids.add(childSnapshot.getValue().toString());
    }
}

谢谢cartant…虽然它没有解决我的问题,但它给了我一些提示!这里也需要你和@FrankvanPuffelen的帮助:请:谢谢cartant…虽然它没有解决我的问题,但它给了我一些提示!这里也需要你和@FrankvanPuffelen的帮助:请:你说你想要这些键,但在你的例子中,你指出了这些值。在上面的数据结构中,看起来键是1484967071和1484967222,值是-Kayr_ENTy4QZQKn3Bgx和-KaywN_5pTOrB0ooBIC3。你真的想要键还是值?@DougStevenson所说的键,我指的是字符串-KaywN_5pTOrB0ooBIC3和这个-Kayr_ENTy4QZQKn3Bgx,而不是键:值对中的键。对不起,让你感到困惑。我认为给出的答案应该适合你。确保您获得的是迭代子快照的值,而不是传递给onDataChange的快照。您说您需要这些键,但在您的示例中,您指出了这些值。在上面的数据结构中,看起来键是1484967071和1484967222,值是-Kayr_ENTy4QZQKn3Bgx和-KaywN_5pTOrB0ooBIC3。你真的想要键还是值?@DougStevenson所说的键,我指的是字符串-KaywN_5pTOrB0ooBIC3和这个-Kayr_ENTy4QZQKn3Bgx,而不是键:值对中的键。对不起,让你感到困惑。我认为给出的答案应该适合你。确保获取的是迭代子快照的值,而不是传递给onDataChange的快照的值。