我在数据库中有相同引用的数据,并且我试图将其存储在ArrayList<String>
中。
以下是:
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.child("child").child(uid)...
中存储了2个密钥,它们将逐个存储在ids
中:
D/ids: [-Kayr_ENTy4QZQKn3Bgx]
D/ids: [-Kayr_ENTy4QZQKn3Bgx, -KaywN_5pTOrB0ooBIC3]
我想知道的是是如何让它们在ids
而不是一个一个地添加?
更新1 : -
数据结构有点像这样:
-app
-child
-uid
-1484967071: -Kayr_ENTy4QZQKn3Bgx
-1484967222: -KaywN_5pTOrB0ooBIC3
并按照cartant的建议使用valueEventListener()
会导致检索到此内容:
D/ids: [{1484967222=-KaywN_5pTOrB0ooBIC3, 1484967071=-Kayr_ENTy4QZQKn3Bgx}]
虽然我只想要密钥,-KaywN_5pTOrB0ooBIC3
和-Kayr_ENTy4QZQKn3Bgx
。
答案 0 :(得分:4)
如果您希望将整个快照传递给收听者,请使用addValueEventListener
或addListenerForSingleValueEvent
。
如果使用addValueEventListener
,将使用初始快照调用侦听器,如果数据库发生更改,则会再次调用侦听器。
如果您使用addListenerForSingleValueEvent
,则只会使用初始快照调用一次侦听器。
听众收到的快照将包括所有孩子。要迭代它们,你会做这样的事情:
@Override
public void onDataChange(DataSnapshot snapshot) {
ArrayList<String> ids = new ArrayList<String>();
for (DataSnapshot childSnapshot: snapshot.getChildren()) {
ids.add(childSnapshot.getValue().toString());
}
}