【发布时间】:2018-06-27 11:23:43
【问题描述】:
我正在使用带有 android 的 firebase 来创建一个简单的聊天应用程序。当用户选择另一个用户聊天时,我想检查他们是否一起聊天。
在onCreate() 方法中,我正在检索当前用户之前使用的所有房间,并将它们放入一个名为MyChatRooms<> 的数组列表中。
然后我想检查每个房间以查看房间的用户。
问题是我用来遍历房间名称的循环在我能够从数据库中检索任何数据之前完成。
我知道我有类似的问题,但没有一个答案对我有用。
相关代码如下:
if (!MYChatRooms.isEmpty()) {
for (j = 0; j < MYChatRooms.size(); j++) {
roomref.child(MYChatRooms.get(j)).child("First User").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot1) {
if (!dataSnapshot1.getValue().toString().equals(Username) && dataSnapshot1.getValue().toString().equals(NUsername)) {
Users += dataSnapshot1.getValue().toString() + ",,, ";
} else if (dataSnapshot1.getValue().toString().equals(Username)) {
roomref.child(MYChatRooms.get(j)).child("Second User").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot2) {
if (dataSnapshot2.getValue().toString().equals(NUsername)) {
Users += dataSnapshot2.getValue().toString() + ",,, ";
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
}
【问题讨论】:
-
如果没有看到相应的数据结构,代码很难阅读。请编辑您的问题以包含 JSON 的 sn-p(作为文本,没有屏幕截图)。您可以通过单击Firebase Database console 中的“导出 JSON”链接来获取此信息。
-
但我的第一个猜测是您应该考虑使用不同的数据结构。循环遍历房间以找到匹配的房间可能非常昂贵。 M.Waqas Pervez 的答案显示了另一种结构,但也考虑使用标识用户的房间名称/密钥,正如我在这里展示的那样:stackoverflow.com/questions/33540479/…
标签: android firebase firebase-realtime-database