在FirebaseStore中进行嵌套查询,因此第二个查询使用第一个查询的输出

时间:2019-04-18 08:05:09

标签: android database firebase async-await

在我的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();等待第一个查询的答案,您该怎么做?

0 个答案:

没有答案