Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/225.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android ';其他';即使在'之后执行块;如果';块在OnDataChange()中完成执行_Android_If Statement_Firebase_Firebase Realtime Database - Fatal编程技术网

Android ';其他';即使在'之后执行块;如果';块在OnDataChange()中完成执行

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

这里是Android初学者。这听起来可能很傻,但我在firebase数据库引用的事件侦听器中的onDataChange()方法中创建的if-else块有问题

以下是侦听器的代码:

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修复了它