首页 > 解决方案 > 完成 Querysnapshot 任务后如何启动新的 Intent?

问题描述

我使用了 OnSuccessListener 从 firestore 数据库中获取数据。我想在 Fetching Data Task 完成执行后开始一个新的 Intent。但是意图将在完成任务之前启动。有没有办法解决这个问题?

db.collection("users/user/driver").get().addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() {
    @Override
    public void onSuccess(QuerySnapshot queryDocumentSnapshots1) {
        if (!queryDocumentSnapshots1.isEmpty()) {
            List<DocumentSnapshot> list1 = queryDocumentSnapshots1.getDocuments();
            for (final DocumentSnapshot d1 : list1) {
                String driverId = d1.getId();
                db.collection("users/user/driver").document(driverId).collection("checkpoints").get()
                        .addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() {
                            @Override
                            public void onSuccess(QuerySnapshot queryDocumentSnapshots2) {
                                // Some Code
                            }

                        }).addOnFailureListener(new OnFailureListener() {
                            @Override
                            public void onFailure(@NonNull Exception e) {

                            }
                });
            }
        }
        dialog.dismiss();
    }
    }).addOnFailureListener(new OnFailureListener() {
        @Override
        public void onFailure(@NonNull Exception e) {
        }
    }
);


Intent intent = new Intent(PassengerRouteSearchActivity.this,PassengerRouteSearch2Activity.class);
intent.putStringArrayListExtra("filteredRoutes",filteredRoutes);
startActivity(intent);

标签: androidgoogle-cloud-firestore

解决方案


您必须在内部传递意图onSuccess。然后它将按您的预期工作..

db.collection("users/user/driver").get().addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() {
        @Override
        public void onSuccess(QuerySnapshot queryDocumentSnapshots1) {
            if (!queryDocumentSnapshots1.isEmpty()) {
                List<DocumentSnapshot> list1 = queryDocumentSnapshots1.getDocuments();
                for (final DocumentSnapshot d1 : list1) {
                    String driverId = d1.getId();
                    db.collection("users/user/driver").document(driverId).collection("checkpoints").get()
                            .addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() {
                                @Override
                                public void onSuccess(QuerySnapshot queryDocumentSnapshots2) {
                                    // Your Code.
                                }

                            }).addOnFailureListener(new OnFailureListener() {
                                @Override
                                public void onFailure(@NonNull Exception e) {

                                }
                    });
                }
                Intent intent = new Intent(PassengerRouteSearchActivity.this,PassengerRouteSearch2Activity.class);
                intent.putStringArrayListExtra("filteredRoutes",filteredRoutes);
                startActivity(intent);
            }
            dialog.dismiss();
        }
    }).addOnFailureListener(new OnFailureListener() {
        @Override
        public void onFailure(@NonNull Exception e) {
        }
});

推荐阅读