【问题标题】:ArrayList<String> method return an empty array getting data from firebaseArrayList<String> 方法返回一个从 firebase 获取数据的空数组
【发布时间】:2019-05-06 03:44:20
【问题描述】:

我的返回有问题..由于下载数据需要几秒钟,当方法返回 ArrayList 时,它仍然是空的。事实上,如果我把那行代码Log.v("array", String.valueOf(partecipantsArrayList)); 首先它打印 0,然后打印填充的数组。所以我必须在return语句之前等待..有什么办法可以做到这一点?

public ArrayList<String> getPartecipantsList(){
    String email = getEmail();
    String groupTitle = getTitleBar();
    DocumentReference docRef = db.collection("users").document(email).collection("Group").document(groupTitle);

    docRef.get()
            .addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
                @Override
                public void onComplete(@NonNull Task<DocumentSnapshot> task) {


                        DocumentSnapshot document = task.getResult();


                        //Extracting participants ArrayList from the document
                        for(Object item : task.getResult().getData().values()) {

                            String[] values = String.valueOf(item).replace("[", "").replace("]", "").split(",");

                            for (String value : values){

                                    partecipantsArrayList.add(value);

                            }

                        }
                        partecipantsArrayList.remove(String.valueOf("["));
                        partecipantsArrayList.remove(partecipantsArrayList.size() - 1);
                        Log.v("array", String.valueOf(partecipantsArrayList));

                    }

                })

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

                }
            });


    return partecipantsArrayList;
}

【问题讨论】:

    标签: android firebase arraylist google-cloud-firestore


    【解决方案1】:

    这是异步任务,您可以像下面这样调整此代码。

    将该方法的签名更改为return void

    public void getPartecipantsList();
    

    on 完成后执行下一步操作

                    @Override
                    public void onComplete(@NonNull Task<DocumentSnapshot> task) {
    
                            ...............
                            partecipantsArrayList.remove(String.valueOf("["));
                            partecipantsArrayList.remove(partecipantsArrayList.size() - 1);
    
                            Log.v("array", String.valueOf(partecipantsArrayList));
                           // do your action by calling next method from here
                          //eg: setResultFromArray(partecipantsArrayList);
                        }
    

    onFailure 中的失败时执行失败操作或调用方法。

                    @Override
                    public void onFailure(@NonNull Exception e) {
                         //......
                    } 
    

    【讨论】:

    • 是的,现在我将操作数组的代码放在“OnComplete”方法中,现在它可以工作了......谢谢!
    • @Nicola 很高兴听到它。快乐编码
    猜你喜欢
    • 2018-10-12
    • 2013-03-06
    • 2014-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-27
    • 2020-09-21
    • 1970-01-01
    相关资源
    最近更新 更多