首页 > 解决方案 > 如何检查firestore中的查询?

问题描述

附上图片供firestore参考云防火墙

尝试检查 firestore 中的查询以了解用户是否发送了请求或收到了请求,它可以相应地执行任务并更改按钮的文本。

firebaseFirestore.collection("users").document(userid).collection("request").whereEqualTo("userid",otherUserid).get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
        @Override
        public void onComplete(@NonNull Task<QuerySnapshot> task) {
            if(task.isSuccessful()){
                List<DocumentSnapshot> document = task.getResult().getDocuments();
                if(document.contains("received")){
                    current_state="req_received";
                    send.setText("Accept Request");
                }else if(document.contains("sent")){
                    current_state = "req_sent";
                    send.setText("Cancel Request");
                }
            }
        }
    });

以下代码用于发送或取消请求,它工作正常,但是当我返回另一个活动并再次返回时,按钮的文本更改为发送请求,该请求必须保留以取消请求,因为请求已经发送。

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


            if (userid.equals(otherUserid)) {
                Toast.makeText(ProfileActivity.this, "Cannot send request to your own", Toast.LENGTH_SHORT).show();
                return;
            }
            //--------Not friends.....

            send.setEnabled(false);
            if (current_state.equals("not_friends")) {

                FirebaseFirestore firebaseFirestore = FirebaseFirestore.getInstance();
                //  String userid = firebaseAuth.getCurrentUser().getUid();
                Map<String, String> profile = new HashMap<>();
                profile.put("userid", otherUserid);

                firebaseFirestore.collection("users").document(userid).collection("request")
                        .document("sent").set(profile).addOnCompleteListener(new OnCompleteListener<Void>() {
                    @Override
                    public void onComplete(@NonNull Task<Void> task) {
                        if (task.isSuccessful()) {
                            FirebaseFirestore firebaseFirestore = FirebaseFirestore.getInstance();
                            //  String userid = firebaseAuth.getCurrentUser().getUid();
                            Map<String, String> profile = new HashMap<>();
                            profile.put("userid", userid);

                            firebaseFirestore.collection("users").document(otherUserid).collection("request")
                                    .document("received").set(profile).addOnCompleteListener(new OnCompleteListener<Void>() {
                                @Override
                                public void onComplete(@NonNull Task<Void> task) {
                                    if (task.isSuccessful()) {

                                        send.setEnabled(true);
                                        current_state = "req_sent";
                                        send.setText("Cancel Request");

                                        Toast.makeText(ProfileActivity.this, "Success", Toast.LENGTH_SHORT).show();
                                    }
                                }
                            });
                        } else {
                            Toast.makeText(ProfileActivity.this, "Failed sending request", Toast.LENGTH_SHORT).show();

                        }
                    }
                });
            }

            //-------- Cancel request.......

            if (current_state.equals("req_sent")) {
                FirebaseFirestore firebaseFirestore = FirebaseFirestore.getInstance();
                Map<String, Object> profile = new HashMap<>();
                //  String userid = firebaseAuth.getCurrentUser().getUid();
                profile.put("userid", FieldValue.delete());

                firebaseFirestore.collection("users").document(userid).collection("request")
                        .document("sent").update(profile).addOnCompleteListener(new OnCompleteListener<Void>() {
                    @Override
                    public void onComplete(@NonNull Task<Void> task) {
                        if (task.isSuccessful()) {
                            FirebaseFirestore firebaseFirestore = FirebaseFirestore.getInstance();
                            //  String userid = firebaseAuth.getCurrentUser().getUid();
                            Map<String, Object> profile = new HashMap<>();
                            profile.put("userid", FieldValue.delete());

                            firebaseFirestore.collection("users").document(otherUserid).collection("request")
                                    .document("received").update(profile).addOnCompleteListener(new OnCompleteListener<Void>() {
                                @Override
                                public void onComplete(@NonNull Task<Void> task) {
                                    if (task.isSuccessful()) {

                                        send.setEnabled(true);
                                        current_state = "not_friends";
                                        send.setText("Send Request");

                                        Toast.makeText(ProfileActivity.this, "Request canceled", Toast.LENGTH_SHORT).show();
                                    }
                                }
                            });
                        } else {
                            Toast.makeText(ProfileActivity.this, "Failed request canceled", Toast.LENGTH_SHORT).show();

                        }
                    }
                });
            }


        }
    });

}

}

标签: javaandroidgoogle-cloud-firestore

解决方案


正如您所确认的,如果错误仅存在于比较部分,则如下所示更改查询迭代可能会解决问题。

if (task.isSuccessful()) {
     for (QueryDocumentSnapshot document : task.getResult()) {
               if(document.getId().contains("received")){
                    current_state="req_received";
                    send.setText("Accept Request");
                    // do pending stuffs or break the loop here
                } else if(document.getId().contains("sent")){
                    current_state = "req_sent";
                    send.setText("Cancel Request");
                    // do pending stuffs or break the loop here
                }
     }
}

参考:https ://firebase.google.com/docs/firestore/query-data/queries


推荐阅读