【问题标题】:firestore query in for loop android javafor循环android java中的firestore查询
【发布时间】:2020-10-18 20:30:15
【问题描述】:

我是java 的新手。我有一个firestore_member_list。在 firestore_member_list 中,它包含值:["steve","ram","kam"]。我正在使用for 循环来一一传递值。

loadingbar.show()
for( int k=0; k<firestore_member_list.size();k++){
        String member_name = firestore_member_list.get(k);
        final DocumentReference memDataNameCol = firestoredb.collection("member_collection").document(member_name);
        memDataNameCol.get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
        @Override
        public void onComplete(@NonNull Task<DocumentSnapshot> task) {
                if (task.isSuccessful()) {
                DocumentSnapshot document = task.getResult();
                if (document.exists()) {
//                      In here, I am retreiveing the document data from firestore and assigning it to the ArrayList which is `all_mem_data`

                        all_mem_data.add(document.get("member_name").toString());
                        all_mem_data.add(document.get("member_address").toString());
                        Toast.makeText(getActivity(), "all mem data array"+all_mem_data.toString(),
                                Toast.LENGTH_LONG).show();
                }
                }
        }
        });
}
Log.d("all_mem_data",all_mem_data)
loadingbar.hide()

我知道 firestore 是异步执行的。由于firestore异步检索数据,在填充all_mem_data的数组之前,最后一行被执行并显示空数组。如何等待数组被填充,填充后,执行最后两行。请帮我解决问题。

【问题讨论】:

    标签: java android arrays firebase google-cloud-firestore


    【解决方案1】:

    任何需要来自数据库的数据的代码都需要在onComplete 中,当该数据可用时触发。

    如果您想等到所有文档都加载完毕,您可以例如保留一个计数器:

    loadingbar.show()
    int completeCount = 0;
    for( int k=0; k<firestore_member_list.size();k++){
        String member_name = firestore_member_list.get(k);
        final DocumentReference memDataNameCol = firestoredb.collection("member_collection").document(member_name);
        memDataNameCol.get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
            @Override
            public void onComplete(@NonNull Task<DocumentSnapshot> task) {
                ...
    
                if (completeCount++ == firestore_member_list.size()-1) {
                    Log.d("all_mem_data",all_mem_data)
                    loadingbar.hide()
                }
            }
        });
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多