Java 如何将从Firebase检索到的数据一次性存储在ArrayList中?
我在数据库中的同一引用下有一些数据,我正试图将其存储在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
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的快照的值。