не будет сохранять данные ArrayList после addOnCompleteListener в firebase [дубликат]

avatar
tnuva
8 августа 2021 в 22:13
39
0
0

Я создаю RecyclerView, в котором я беру некоторые данные из firebase в конструкторе, однако данные удаляются, как только метод onComplete завершается.

я добавил всплывающее уведомление, чтобы получать отзывы о том, где удаляются данные.

конструктор RecyclerView:

public RecycleAdapter(Context context) {

        this.context = context;
        activityTasks =new ArrayList<>();

        try {
            task = Repository.getAllUserActivityTasks();
            
            //this is the onComplete() method via lamda
            task.addOnCompleteListener((OnCompleteListener<QuerySnapshot>) task -> {
                if (task.isSuccessful()) {
                    for (DocumentSnapshot entry :
                            task.getResult().getDocuments())
                        activityTasks.add(entry.toObject(ActivityTask.class)); //adding data to ArrayList
                }

                Toast.makeText(context, "out: "+activityTasks.size(), Toast.LENGTH_SHORT).show(); //returning 3

            });
        } catch (Throwable throwable) {
            throwable.printStackTrace();
        }
        Toast.makeText(context, "out: "+activityTasks.size(), Toast.LENGTH_SHORT).show(); //returning 0
    }

метод getAllUserActivityTasks в репозитории, где я получаю задачу:

public static Task<QuerySnapshot> getAllUserActivityTasks(){

       Task task = getActivityTaskCollection()
               .get()
               .addOnSuccessListener(queryDocumentSnapshots -> Log.d("firestore", "getAllUserActivityTasks: success"))
               .addOnFailureListener(e -> Log.d("firestore", "getAllUserActivityTasks: failure"));

        return task;
    }

я пытался вызвать onComplete в onBindViewHolder в RecyclerView, поэтому я получу данные о создании RecyclerView, но это не сработало.

из того, что я видел в Интернете, люди говорят, что использование onComplete должно сохранить мои данные, но это не сработает для меня...

Источник
Alex Mamo
9 августа 2021 в 07:05
0

API Firebase является асинхронным. Поэтому, пожалуйста, проверьте дубликат, чтобы увидеть, как вы можете решить эту проблему, используя пользовательский обратный вызов или используя Kotlin Coroutines.

Ответы (0)