即使在'if'块完成OnDataChange()中的执行后,'else'块也会执行

时间:2017-06-20 08:34:17

标签: android if-statement firebase firebase-realtime-database

Android初学者在这里。这可能听起来很愚蠢,但是我遇到了一个if-else块的问题,我在onDataChange()方法中为firebase数据库引用的事件监听器创建了这个块。

以下是监听器的代码:

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方法onClick()内部,用于按钮。 需要做的是 - 第一次单击此按钮时,数据(请求)将写入数据库。对于每次后续点击按钮,我会检查用户是否正在尝试发送多个请求,如果是,我会显示吐司并返回。

我在运行期间观察到的是,在第一次点击按钮时,会显示两个Toast消息。

为什么会这样?

0 个答案:

没有答案