gpt4 book ai didi

java - 当数据更改时,Firebase 不会检索最后的数据,并且不会以正确的方式执行 addValueEventListener 内的条件

转载 作者:行者123 更新时间:2023-12-01 17:21:05 24 4
gpt4 key购买 nike

我试图根据数据库中的值条件在 addValueEventListener 中执行一些代码,但是当数据更改时,监听器根据旧数据执行条件,并在第二次尝试监听器执行我想要使用的数据。但是数据更改监听器执行listener(-1)数据。更清楚地说,如果存在“禁用”或“停止”子项,我不想执行代码,但是在更新数据并且这些子项不存在之后,我调用 AddMessage 方法时的条件不再执行,但它执行方法当我第二次调用时,它会正确执行,直到下次更新数据为止,它会再次出现相同的问题。

sendMessage.setOnClickListener(new View.OnClickListener() {@Override
public void onClick(View v) {
AddMessage();
}
});

private void AddMessage() {
nListener = RootRef.child("List Ref").child(messageReceiverID).child(messageSenderID).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if (dataSnapshot.exists()) {
if (!dataSnapshot.hasChild("disable") && !dataSnapshot.hasChild("stop")) {
HashMap <String,String> chatMessageMap = new HashMap <>();
chatMessageMap.put("from", messageSenderID);
chatMessageMap.put("type", "check");
chatMessageMap.put("content", messageText);
MessagesRef.child(messageReceiverID).push().setValue(chatMessageMap);
RootRef.child("List Ref").child(messageReceiverID).child(messageSenderID).removeEventListener(nListener);
} else {
RootRef.child("List Ref").child(messageReceiverID).child(messageSenderID).removeEventListener(nListener);
}
}
}

@Override
public void onCancelled(@NonNull DatabaseError databaseError) {

}
});
}

最佳答案

sendMessage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {

String stoppedUser;

myDbref = FirebaseDatabase.getInstance().getReference().child("List Ref").child(<UID_OF_RECEIVER_OF_MESSAGE>);
myDbref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
try {
stoppedUser = dataSnapshot.child(<UID_OF_SENDER>).child("stop").getValue().toString();

//Now use if-else statement
if(<UID_OF_RECEIVER> == stoppedUser){
Toast.makeText(getApplicationContext(), "You are blocked.", Toast.LENGTH_LONG).show();
} else {
AddMessage();
}

}catch (Throwable e){
Toast.makeText(getApplicationContext(), e.toString(), Toast.LENGTH_SHORT).show();
}
}

@Override
public void onCancelled(@NonNull DatabaseError databaseError) {

}

});

虽然你可以获得<UID_OF_SENDER>通过使用FirebaseUser currentUserUID = FirebaseAuth.getInstance().getCurrentUser();确保输入 <UID_OF_RECEIVER> 的值正确,并根据需要更正数据库路径。

关于java - 当数据更改时,Firebase 不会检索最后的数据,并且不会以正确的方式执行 addValueEventListener 内的条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61288719/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com