在我的android项目中将FirebaseStore用作数据库。
现在,我想对数据库文档进行查询,并使用从第一个查询中获得的值执行另一个查询。
每次运行此代码时,第二个查询都会出现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();
等待第一个查询的答案,您该怎么做?