Android 未添加到arrayList中的项

Android 未添加到arrayList中的项,android,firebase,arraylist,google-cloud-firestore,Android,Firebase,Arraylist,Google Cloud Firestore,我使用firebase firestore来存储一些数据。我在TimeForm活动中存储数据 FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser(); globalClass.setAction(actionText); globalClass.setTime(totalTime); globalClass.setUser_email(user.getEmail()); ScheduleClass scheduleClass

我使用firebase firestore来存储一些数据。我在TimeForm活动中存储数据

FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
globalClass.setAction(actionText);
globalClass.setTime(totalTime);
globalClass.setUser_email(user.getEmail());
ScheduleClass scheduleClass = new ScheduleClass(fromEditText.getText().toString() + " - " + untilEditText.getText().toString(), multiLineEditText.getText().toString(), user.getEmail());
Map<String, Object> userMap = new HashMap<>();
userMap.put("Time", globalClass.getTime());
userMap.put("Action", globalClass.getAction());
userMap.put("user_email", globalClass.getUser_email());
mondayCollectionReference = db.collection("Monday");
tuesdayCollectionReference = db.collection("Tuesday");                                                      
mondayCollectionReference.document().set(userMap, SetOptions.merge()).addOnSuccessListener(new OnSuccessListener<Void>() {
        @Override
        public void onSuccess(Void aVoid) {
            Toast.makeText(TimeForm.this, "Submitted", Toast.LENGTH_SHORT).show();
        }
    }).addOnFailureListener(new OnFailureListener() {
        @Override
        public void onFailure(@NonNull Exception e) {
            Log.d("ERROR", e.getMessage());
        }
    });
FirebaseUser user=FirebaseAuth.getInstance().getCurrentUser();
globalClass.setAction(actionText);
全局类设置时间(总时间);
globalClass.setUser_电子邮件(user.getEmail());
ScheduleClass ScheduleClass=新的ScheduleClass(fromEditText.getText().toString()+“-”+untilEditText.getText().toString(),MultilineDittext.getText().toString(),user.getEmail());
Map userMap=newhashmap();
userMap.put(“Time”,globalClass.getTime());
userMap.put(“Action”,globalClass.getAction());
userMap.put(“user_email”,globalClass.getUser_email());
mondayCollectionReference=db.collection(“周一”);
周二集合参考=db.collection(“周二”);
mondayCollectionReference.document().set(userMap,SetOptions.merge()).addOnSuccessListener(新OnSuccessListener()){
@凌驾
成功时公开作废(作废避免){
Toast.makeText(TimeForm.this,“Submitted”,Toast.LENGTH_SHORT.show();
}
}).addOnFailureListener(新的OnFailureListener(){
@凌驾
public void onFailure(@NonNull异常e){
Log.d(“错误”,例如getMessage());
}
});
这里一切都很好,数据以我想要的格式存储。然后我在MainActivity中检索数据。因此,在时间格式中,用户添加了15:00-17:00这样的时间,但他添加了多个时间,在MainActivity中,我将所有时间存储在ArrayList中。代码如下:

db = FirebaseFirestore.getInstance();
final ArrayList<String> loadMondayTimeArrayList = new ArrayList<>();
user = FirebaseAuth.getInstance().getCurrentUser();
db.collection("Monday").addSnapshotListener(new EventListener<QuerySnapshot>() {
    @Override
    public void onEvent(@Nullable QuerySnapshot documentSnapshots, @Nullable FirebaseFirestoreException e) {
        for(DocumentSnapshot documentSnapshot : documentSnapshots){
            String time;
            String action;
            String user_email;
            time = documentSnapshot.getString("Time");
            action = documentSnapshot.getString("Action");
            user_email = documentSnapshot.getString("user_email");
            mondayTimeArrayList.add(time);
        }
    }
});
db=FirebaseFirestore.getInstance();
最终ArrayList loadMondayTimeArrayList=新ArrayList();
user=FirebaseAuth.getInstance().getCurrentUser();
db.collection(“星期一”).addSnapshotListener(新的EventListener(){
@凌驾
public void onEvent(@Nullable QuerySnapshot documentSnapshots,@Nullable FirebaseFirestoreException e){
用于(文档快照文档快照:文档快照){
串时间;
弦作用;
字符串用户_电子邮件;
时间=documentSnapshot.getString(“时间”);
action=documentSnapshot.getString(“action”);
user_email=documentSnapshot.getString(“user_email”);
添加(时间);
}
}
});

当我在addSnapShotListener中记录时间时,它完美地记录了时间。但是,当我将时间添加到mondayTimeArrayList并尝试将mondayTimeArrayList的项目记录在addSnapShotListener之外时,我得到了一个索引越界错误

这是因为添加快照侦听器是异步的,并且该方法会立即返回。在调用回调并成功完成之前,不会填充数组。如果要使用侦听器的结果,则只有在侦听器完全完成后才能访问这些结果。

回调将结束,但通过回调后的其他代码将继续运行。异步代码就是这样工作的。对,我怎样才能让它停止,或者有没有其他方法可以在addSnapshotListener之外获取这些字符串?签出。谢谢,我会签出的。对我来说似乎是一个解决办法:)很高兴听到:)干杯!