Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.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 是否可以从GeoFirestore查询中删除当前用户?_Android_Firebase_Google Cloud Firestore_Geolocation_Geofirestore - Fatal编程技术网

Android 是否可以从GeoFirestore查询中删除当前用户?

Android 是否可以从GeoFirestore查询中删除当前用户?,android,firebase,google-cloud-firestore,geolocation,geofirestore,Android,Firebase,Google Cloud Firestore,Geolocation,Geofirestore,如果查询半径为100公里的用户,如何将自己(当前用户)排除在查询之外? 因为当onDocumentMoved触发时,如果您是唯一一个在输入的文档上触发移动的人,您将再次获得用户,但您与用户之间的距离不同,因此,如果您使用OnDocumentEnter方法将他们添加到数据库中,您将获得重复的结果。我解决这个问题的方法是在再次打开应用程序时从数据库中删除所有usersInRange。我知道这不是一个完美的解决方案,我正在寻找一个更好的解决方案 以下是我的代码: public void getLo

如果查询半径为100公里的用户,如何将自己(当前用户)排除在查询之外?

因为当onDocumentMoved触发时,如果您是唯一一个在输入的文档上触发移动的人,您将再次获得用户,但您与用户之间的距离不同,因此,如果您使用OnDocumentEnter方法将他们添加到数据库中,您将获得重复的结果。我解决这个问题的方法是在再次打开应用程序时从数据库中删除所有usersInRange。我知道这不是一个完美的解决方案,我正在寻找一个更好的解决方案

以下是我的代码:

  public void getLocation(Location location){
    ArrayList<String> docMoved = new ArrayList<>();
    listenerRegistration = documentReference.addSnapshotListener(new EventListener<DocumentSnapshot>() {
        @Override
        public void onEvent(@Nullable DocumentSnapshot value, @Nullable FirebaseFirestoreException error) {
            if(value != null && value.exists()){
                if (value.get("LocationRange") != null && value.get("AgeRangeFrom") != null && value.get("AgeRangeTo") != null && value.getString("InterestInGender") != null) {
                    locationRange = (double) value.get("LocationRange");
                    ageRangeFrom = (double) value.get("AgeRangeFrom");
                    ageRangeTo = (double) value.get("AgeRangeTo");
                    interestInGender = value.getString("InterestInGender");
                    ArrayList<HashMap<Object, Object>> usersInRange = (ArrayList<HashMap<Object, Object>>) value.get("UsersInRange");

                    geoQuery = geoFirestore.queryAtLocation(new GeoPoint(location.getLatitude(), location.getLongitude()), locationRange);

                    geoQuery.addGeoQueryDataEventListener(new GeoQueryDataEventListener() {
                        @Override
                        public void onDocumentEntered(@NotNull DocumentSnapshot documentSnapshot5, @NotNull GeoPoint geoPoint) {
                            if (documentSnapshot5.get("age") != null && documentSnapshot5.getString("Gender") != null && documentSnapshot5.get("Images") != null && !documentSnapshot5.getId().equals(user.getUid())) {
                                age = (long) documentSnapshot5.get("age");
                                userGender = documentSnapshot5.getString("Gender");
                                userPhotos = (ArrayList<String>) documentSnapshot5.get("Images");

                                Location locationNew = new Location(documentSnapshot5.getId());
                                locationNew.setLatitude(geoPoint.getLatitude());
                                locationNew.setLongitude(geoPoint.getLongitude());

                                distanceM = location.distanceTo(locationNew);
                                distanceKM = (int) Math.round(distanceM / 1000);


                                if (age >= ageRangeFrom && age <= ageRangeTo && interestInGender.equals("Women") && userGender.equals("Woman")) {
                                    db.collection("UsersFilter").document(user.getUid()).update("UsersInRange", FieldValue.arrayUnion(new User(documentSnapshot5.getString("Name"), age, userPhotos.get(0), documentSnapshot5.getId(), distanceKM, null)));
                                } else if (age >= ageRangeFrom && age <= ageRangeTo && interestInGender.equals("Men") && userGender.equals("Man")) {
                                    db.collection("UsersFilter").document(user.getUid()).update("UsersInRange", FieldValue.arrayUnion(new User(documentSnapshot5.getString("Name"), age, userPhotos.get(0), documentSnapshot5.getId(), distanceKM, null)));
                                } else if (age >= ageRangeFrom && age <= ageRangeTo && interestInGender.equals("Everyone")) {
                                    db.collection("UsersFilter").document(user.getUid()).update("UsersInRange", FieldValue.arrayUnion(new User(documentSnapshot5.getString("Name"), age, userPhotos.get(0), documentSnapshot5.getId(), distanceKM, null)));
                                } else {
                                    db.collection("UsersFilter").document(user.getUid()).update("UsersInRange", FieldValue.arrayRemove(new User(documentSnapshot5.getString("Name"), age, userPhotos.get(0), documentSnapshot5.getId(), distanceKM, null)));
                                }
                            }


                        }

                        @Override
                        public void onDocumentExited(@NotNull DocumentSnapshot documentSnapshot1) {
                            db.collection("UsersFilter").document(user.getUid()).get().addOnSuccessListener(new OnSuccessListener<DocumentSnapshot>() {
                                @Override
                                public void onSuccess(DocumentSnapshot documentSnapshot) {
                                    ArrayList<HashMap<Object, Object>> usersInRange = (ArrayList<HashMap<Object, Object>>) documentSnapshot.get("UsersInRange");
                                    if (usersInRange != null && !usersInRange.isEmpty()) {
                                        for (int i = 0; i < usersInRange.size(); i++) {
                                            if (usersInRange.get(i).containsValue(documentSnapshot1.getId())) {
                                                db.collection("UsersFilter").document(user.getUid()).update("UsersInRange", FieldValue.arrayRemove(usersInRange.get(i)));
                                            }
                                        }
                                    }
                                }
                            });
                        }


                        @Override
                        public void onDocumentMoved(@NotNull DocumentSnapshot documentSnapshot6, @NotNull GeoPoint geoPoint) {
                            docMoved.add(documentSnapshot6.getId());
                            if(!documentSnapshot6.getId().equals(user.getUid())) {
                                db.collection("UsersFilter").document(user.getUid()).get().addOnSuccessListener(new OnSuccessListener<DocumentSnapshot>() {
                                    @Override
                                    public void onSuccess(DocumentSnapshot documentSnapshot) {
                                        ArrayList<HashMap<Object, Object>> usersInRange = (ArrayList<HashMap<Object, Object>>) documentSnapshot.get("UsersInRange");
                                        if (usersInRange != null && !usersInRange.isEmpty()) {
                                            for (int i = 0; i < usersInRange.size(); i++) {
                                                if (usersInRange.get(i).containsValue(documentSnapshot6.getId())) {
                                                    db.collection("UsersFilter").document(user.getUid()).update("UsersInRange", FieldValue.arrayRemove(usersInRange.get(i)));
                                                }
                                            }
                                        }
                                    }
                                });
                            }
                        }

                        @Override
                        public void onDocumentChanged(@NotNull DocumentSnapshot documentSnapshot1, @NotNull GeoPoint geoPoint) {
                            if(docMoved.size() == 1 && docMoved.get(0).equals(user.getUid())){
                                db.collection("UsersFilter").document(user.getUid()).update("UsersInRange", FieldValue.delete());
                            }
                            db.collection("UsersFilter").document(user.getUid()).get().addOnSuccessListener(new OnSuccessListener<DocumentSnapshot>() {
                                @Override
                                public void onSuccess(DocumentSnapshot documentSnapshot) {
                                    ArrayList<HashMap<Object, Object>> usersInRange = (ArrayList<HashMap<Object, Object>>) documentSnapshot.get("UsersInRange");
                                    if (usersInRange != null && !usersInRange.isEmpty()) {
                                        for (int i = 0; i < usersInRange.size(); i++) {
                                            if (usersInRange.get(i).containsValue(documentSnapshot1.getId())) {
                                                db.collection("UsersFilter").document(user.getUid()).update("UsersInRange", FieldValue.arrayRemove(usersInRange.get(i)));
                                            }
                                        }
                                    }
                                }
                            });
                        }


                        @Override
                        public void onGeoQueryReady() {

                        }

                        @Override
                        public void onGeoQueryError(@NotNull Exception e) {

                        }
                    });

                }
            }
        }
    });
public void getLocation(位置){
ArrayList docMoved=新建ArrayList();
listenerRegistration=documentReference.addSnapshotListener(新的EventListener(){
@凌驾
public void onEvent(@Nullable DocumentSnapshot值,@Nullable FirebaseFirestoreException错误){
如果(value!=null&&value.exists()){
if(value.get(“LocationRange”)!=null和value.get(“AgrangeFrom”)!=null和value.get(“AgrangeTo”)!=null和value.getString(“InterestInGender”)!=null){
locationRange=(双精度)value.get(“locationRange”);
AgrangeFrom=(双精度)value.get(“AgrangeFrom”);
ageRangeTo=(双精度)value.get(“ageRangeTo”);
interestInGender=value.getString(“interestInGender”);
ArrayList usersInRange=(ArrayList)value.get(“usersInRange”);
geoQuery=geoFirestore.QueryAtology(新的地理点(location.getLatitude(),location.getLatitude()),locationRange);
addGeoQueryDataEventListener(新的GeoQueryDataEventListener(){
@凌驾
已输入文档(@NotNull DocumentSnapshot documentSnapshot5、@NotNull GeoPoint GeoPoint)的公共无效信息{
如果(documentSnapshot5.get(“年龄”)!=null&&documentSnapshot5.getString(“性别”)!=null&&documentSnapshot5.get(“图像”)!=null&&documentSnapshot5.getId().equals(user.getUid()){
年龄=(长)文档快照5.get(“年龄”);
userGender=documentSnapshot5.getString(“性别”);
userPhotos=(ArrayList)documentSnapshot5.get(“图像”);
Location locationNew=新位置(documentSnapshot5.getId());
locationNew.setLatitude(geoPoint.getLatitude());
locationNew.SetLength(geoPoint.getLength());
distanceM=位置。distanceTo(位置新建);
距离km=(整数)数学圆(距离m/1000);
如果(年龄>=ageRangeFrom&&age=ageRangeFrom&&age=ageRangeFrom&&age
       listenerRegistration = documentReference.addSnapshotListener(new EventListener<DocumentSnapshot>() {
        @Override
        public void onEvent(@Nullable DocumentSnapshot value, @Nullable FirebaseFirestoreException error) {

            if(value != null && value.exists()) {
                usersInRange = (ArrayList<HashMap<Object, Object>>) value.get("UsersInRange");
                usersInChat = (ArrayList<HashMap<Object, Object>>) value.get("UsersInChat");

                imageUrls.clear();
                viewPager2Adapter.notifyDataSetChanged();

                if (usersInChat != null && !usersInChat.isEmpty() && usersInRange != null && !usersInRange.isEmpty()) {
                    for (int i = 0; i < usersInChat.size(); i++) {
                        for (int k = 0; k < usersInRange.size(); k++) {
                            if (usersInRange.get(k).containsValue(usersInChat.get(i).get("userID"))) {
                                usersInRange.remove(usersInRange.get(k));
                            }
                        }
                    }
                }

                if (usersInRange != null && !usersInRange.isEmpty()) {
                    for (int i = 0; i < usersInRange.size(); i++) {
                        String profileImage = (String) usersInRange.get(i).get("profilePic");
                        String userName = (String) usersInRange.get(i).get("name");
                        long userAge = (long) usersInRange.get(i).get("age");
                        String userID = (String) usersInRange.get(i).get("userID");
                        long km = (long) usersInRange.get(i).get("km");

                        imageUrls.add(new User(userName, userAge, profileImage, userID, km, null));

                        viewPager2Adapter.notifyDataSetChanged();

                    }
                }
            }
        }
    });