首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >未添加到arrayList中的项目

未添加到arrayList中的项目
EN

Stack Overflow用户
提问于 2018-09-07 03:03:56
回答 1查看 78关注 0票数 2

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

代码语言:javascript
复制
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());
        }
    });

在这里一切都运行得很好,数据以我想要的格式存储。然后我在MainActivity检索数据。因此,在TimeForm中,用户添加了15:00 - 17:00这样的时间,但他添加了多个时间,而在MainActivity中,我将所有时间都存储在一个ArrayList中。代码如下:

代码语言:javascript
复制
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);
        }
    }
});

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

EN

回答 1

Stack Overflow用户

发布于 2018-09-07 03:16:45

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52210646

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档