当我试图从addChildListerner( DataSnapshot )获取对象时,它工作得很好,并将DataSnapshot分配给Object
这种工作状态:
myRef = database.getReference("Chat").child(Combine);
myRef.orderByKey().limitToLast(1).addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
ChatData user = dataSnapshot.getValue(ChatData.class);
userChild.add(user);但是当我尝试使用ValueListerner(快照)应用程序崩溃获取相同的对象时,我使用了所有的snapshot.getChildern (),snapshot.getValue,然后是应用崩溃。
错误与
myRef = database.getReference("Chat").child(Combine);
myRef.orderByKey().limitToLast(1).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
ChatData user = dataSnapshot.getValue(ChatData.class);
userChild.add(user);
}我想检索ChatData user = dataSnapshot.getValue(ChatData.class);userChild.add(user);
Debug time :
DataSnapshot { key =
1123469ACDEFFFFGJKLNOOOPQSTUUVWZabccdehhkkloopqruuuuwxyy,
value
= {-LrjsM3ZO0pzQbvCcRuQ
={time=Tue Oct 22 00:53:10 GMT+05:00 2019
, msg=hi
, user_ID=LuFro93OCcPEpoFTKuQhUkeuw462}}
}如何获得此值

发布于 2019-10-22 13:23:11
当您对Firebase数据库执行查询时,可能会有多个结果。因此,快照包含这些结果的列表。即使只有一个结果,快照也会包含一个结果的列表。
在第一个示例中,Firebase客户端处理列表,并为每个结果调用onChildAdded。但是使用ValueEventListener,您可以得到一个包含所有结果的快照。因此,您的onDataChange将需要处理这个列表,这是通过迭代DataSnapshot.getChildren()来完成的。
就像这样:
myRef.orderByKey().limitToLast(1).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (DataSnapshot userSnapshot: dataSnapshot.getChildren()) {
ChatData user = userSnapshot.getValue(ChatData.class);
userChild.add(user);
}
}https://stackoverflow.com/questions/58499651
复制相似问题