Элементы не добавляются в arrayList - PullRequest
0 голосов
/ 06 сентября 2018

Я использую 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());
        }
    });

Здесь все отлично работает, данные хранятся в том формате, который я хотел. Затем я получаю данные в MainActivity. Таким образом, в TimeForm пользователь добавляет время, например, 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);
        }
    }
});

Когда я записываю время внутри addSnapShotListener, оно прекрасно записывает время. Но когда я добавляю время в mondayTimeArrayList и пытаюсь зарегистрировать элементы mondayTimeArrayList вне addSnapShotListener, я получаю ошибку Index Out Of Bounds.

1 Ответ

0 голосов
/ 06 сентября 2018

Это связано с тем, что добавление прослушивателя снимков выполняется асинхронно, и метод немедленно возвращается. Ваш массив не будет заполняться до тех пор, пока обратный вызов не будет вызван и не завершится успешно. Если вы хотите использовать результаты своего слушателя, вы сможете получить к ним доступ только после того, как слушатель будет полностью завершен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...