Сделайте вложенный запрос в FirebaseStore, чтобы второй запрос использовал выходные данные первого запроса - PullRequest
1 голос
/ 18 апреля 2019

Использование FirebaseStore в качестве базы данных в моем проекте Android.

Теперь я хочу сделать запрос к документу моей базы данных и выполнить другой запрос, используя значения, полученные из первого запроса.

Каждый раз, когда я запускаю этот код, я получаю исключение нулевого указателя во втором запросе, так как он начинает выполняться до получения ответа от первого запроса.

Мне нужно сделать так, чтобы второй запрос ждал ответа отПервый запрос с этим кодом.Как вы можете это сделать?

FirebaseFirestore db = FirebaseFirestore.getInstance();

        //Getting the TenantProfile.
        DocumentReference tenantProfile = db.collection(DataBasePath.USERS.getValue())
                .document(FirebaseAuth.getInstance().getUid());

        tenantProfile.get().addOnSuccessListener(new OnSuccessListener<DocumentSnapshot>() {
            @Override
            public void onSuccess(DocumentSnapshot documentSnapshot) {
                userProfile = documentSnapshot.toObject(Profile.class);
            }
        });

        //Making a query to all Tenant and looking for the candidates.
        CollectionReference userReference = db
                .collection(DataBasePath.USERS.getValue());
        LandlordProfile landlord = userProfile.getLandlord();

        Query tenantCandidateQuery = userReference
                .whereGreaterThan("tenant", "")
                .whereEqualTo("country",landlord.getTenantNation())
                .whereEqualTo("gender",landlord.getTenantGender())
                .whereGreaterThanOrEqualTo("age", landlord.getTenantMinAge())
                .whereLessThanOrEqualTo("age",landlord.getTenantMaxAge())
                ;
        tenantCandidates = null;
        tenantCandidateQuery.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
            @Override
            public void onComplete(@NonNull Task<QuerySnapshot> task) {
                if (task.isSuccessful()){
                    for (DocumentSnapshot document : Objects.requireNonNull(task.getResult())){
                        tenantCandidates.add(document.toObject(Profile.class));
                    }
                }
            }
        });

Мне нужно сделать эту строку LandlordProfile landlord = userProfile.getLandlord(); дождаться ответа из первого запроса, как вы можете это сделать?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...