Android ';其他';即使在'之后执行块;如果';块在OnDataChange()中完成执行
这里是Android初学者。这听起来可能很傻,但我在firebase数据库引用的事件侦听器中的onDataChange()方法中创建的if-else块有问题 以下是侦听器的代码:Android ';其他';即使在'之后执行块;如果';块在OnDataChange()中完成执行,android,if-statement,firebase,firebase-realtime-database,Android,If Statement,Firebase,Firebase Realtime Database,这里是Android初学者。这听起来可能很傻,但我在firebase数据库引用的事件侦听器中的onDataChange()方法中创建的if-else块有问题 以下是侦听器的代码: requestRef.addValueEventListener(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot
requestRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if(dataSnapshot.exists()){
for(DataSnapshot request : dataSnapshot.getChildren()){
RequestDetails retrievedDetails = request.getValue(RequestDetails.class);
if(retrievedDetails.equals(requestDetails)){
alreadyRequested = true;
// finish();
// startActivity(getIntent());
break;
}
}
}
if(!alreadyRequested){
//alreadyDisplayed = true;
mDatabase.child("Requests").push().setValue(requestDetailsHashMap);
Toast.makeText(ParticipantSportOptions.this, "Request Successfully Sent!", Toast.LENGTH_SHORT).show();
// finish();
// startActivity(getIntent());
}
else if(alreadyRequested){
Toast.makeText(ParticipantSportOptions.this, "Request has already been received!\nPlease wait for approval!",
Toast.LENGTH_SHORT).show();
return;
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
此侦听器位于按钮的重写方法onClick()内。
需要做的是——第一次单击此按钮时,数据(请求)被写入数据库。对于以后每次单击按钮,我都会检查用户是否试图发送多个请求,如果是,我会显示toast并返回
我在运行时观察到,在第一次单击按钮时,会显示两条toast消息
为什么会发生这种情况?可能是onDataChange被调用了两次。尝试改用Logcat。log.d(标记“”);对@Lazynija是对的。实际上,它被调用了两次,因为
requestRef
和mDatabase.child(“请求”)
具有相同的值。如果请求不存在,我需要做的是将请求添加到“Requests”节点。我尝试将if-else块移到事件侦听器之外,但我仍然面临同样的问题,Logcat如何帮助解决这个问题@Lazynijai通过使用addListernerForSingleValueEvent修复了它