#android #database #firebase #async-await
# #Android #База данных #firebase #async-await
Вопрос:
Использование FirebaseStore в качестве базы данных в моем проекте Android.
Теперь я хочу сделать запрос к документу моей базы данных и выполнить другой запрос, используя значения, полученные из первого запроса.
Каждый раз, когда я запускаю этот код, я получаю исключение nullpointer при втором запросе, поскольку он начинает выполняться до получения ответа от первого запроса.
Мне нужно сделать так, чтобы второй запрос ожидал ответа от первого запроса с этим кодом. Как вы можете это выполнить?
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();
ждать ответа от первого запроса, как вы можете это сделать?