我在firebase中有以下数据库。
我正在获取一个空指针引用,但我不确定我是否以正确的方式进行操作。 这是我想要做的:
我从子“消息”的快照中获取一条消息,获取接收者和发送者ID,使用这些ID并搜索子“用户”的快照。 然后,我想将另一个接收方用户(如果该用户向他发送了一条消息)或这个用户(如果某个其他用户向该用户发送了一条消息)存储在自定义类型“ UserData”的数组列表中。在这之间,我还要检查数组列表中是否有重复值。我稍后将其与适配器一起使用该阵列列表。这是代码。
public ArrayList<UserData> makeChatDialogListForAdapter() {
chatDialogList = new ArrayList<>();
DatabaseReference messagesDatabase = FirebaseDatabase.getInstance().getReference("Messages");
messagesDatabase.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if(dataSnapshot !=null) {
String currentUserId = grabUserIdFromUserDetails(currentUser.getDisplayName(), currentUser.getEmail());
final Message generalMessage = dataSnapshot.getValue(Message.class);
if (generalMessage.getReceiverUserId().equals(currentUserId)) //someone sent a message to current user
{
DatabaseReference userDatabase = FirebaseDatabase.getInstance().getReference("Users");
userDatabase.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
UserData chatUser = dataSnapshot.child(generalMessage.getSenderUserId()).getValue(UserData.class);
if (!chatDialogList.contains(chatUser))
chatDialogList.add(chatUser);
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
} else if (generalMessage.getSenderUserId().equals(currentUserId)) //current user sent message to someone
{
DatabaseReference userDatabase = FirebaseDatabase.getInstance().getReference("Users");
userDatabase.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
UserData chatUser = dataSnapshot.child(generalMessage.getReceiverUserId()).getValue(UserData.class);
if (!chatDialogList.contains(chatUser))
chatDialogList.add(chatUser);
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
return chatDialogList;
}
这是错误:
java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法'boolean java.lang.String.equals(java.lang.Object)'
感谢您的帮助。
答案 0 :(得分:0)
您正在将ListA = ['John', 'Glucose', 'ABC', 'XYZ'....]
ListB = ['XYZ', 'John', 'Mike',.....]
num = []
for i in range(len(ListB)):
for a in range(len(ListA)):
if ListB[i] == ListA[a]:
print(a)
num.append(a)
num = sorted(num)
print(ListA[POINT OF DIFFERENCE UPON OBSERVATION])
附加到ValueEventListener
。由于下面有多个消息,因此传递到/Messages
的{{1}}将包含多个子节点。您的处理程序无法处理它收到多条消息的事实:
DataSnapshot