Привести результат списка нескольких задач к их POJO в Tasks.whenAllSuccess () (Firestore) - PullRequest
1 голос
/ 01 мая 2020
List<Task<DocumentSnapshot>> fetchUserTasks = new ArrayList<>();

List<Task<DocumentSnapshot>> fetchLikeTasks = new ArrayList<>();

Итак, я создал два списка задач. Если это один список задач, я могу привести object к DocumentSnapshot и сохранить в POJO следующим образом:

Task combineUserTasks =  Tasks.whenAllSuccess(fetchUserTasks).addOnSuccessListener(new OnSuccessListener<List<Object>>() {
                    @Override
                    public void onSuccess(List<Object> objects) {

                        for (Object object : objects) {

                            UserModel userModel = ((DocumentSnapshot) object).toObject(UserModel.class);

                            userModelArrayList.add(userModel);

                        }

                });

Но в случае двух списков задач, как я могу привести результаты для каждого списка?


Tasks.whenAllSuccess(combineUserTasks, combineLikeTask).addOnSuccessListener(new OnSuccessListener<List<Object>>() {
                    @Override
                    public void onSuccess(List<Object> objects) {

                        // How to fetch/cast data for individual POJO here?

                    }
                });

Обновление 1:


Tasks.whenAllSuccess(combineUserTasks, combineLikeTask).addOnSuccessListener(new OnSuccessListener<List<Object>>() {
                    @Override
                    public void onSuccess(List<Object> objects) {

                        for (Object object : objects) {

                            UserModel userModel = ((DocumentSnapshot) object).toObject(UserModel.class);

                            LikeModel likeModel = ((DocumentSnapshot) object).toObject(LikeModel.class);

                            userModelArrayList.add(userModel);

                            likeModelArrayList.add(likeModel);

                        }

                    }
                });

1 Ответ

1 голос
/ 01 мая 2020

Как я понимаю, у вас есть два типа списков, userModelArrayList, который имеет тип UserModel, и likeModelArrayList, который имеет тип LikeModel. Чтобы иметь возможность добавлять каждый объект в соответствующий ему тип списка, вы должны создать списки объектов Task типа UserModel и LikeModel. Поэтому, пожалуйста, измените следующие строки кода:

List<Task<DocumentSnapshot>> fetchUserTasks = new ArrayList<>();
List<Task<DocumentSnapshot>> fetchLikeTasks = new ArrayList<>();

на

List<Task<UserModel>> fetchUserTasks = new ArrayList<>();
List<Task<LikeModel>> fetchLikeTasks = new ArrayList<>();

Поэтому вместо добавления объектов DocumentSnapshot добавьте фактические объекты. Так что используйте toObject() раньше. При этом вы можете проверить каждый тип объекта с помощью оператора instanceof, как в следующих строках кода:

Tasks.whenAllSuccess(combineUserTasks, combineLikeTask).addOnSuccessListener(new OnSuccessListener<List<Object>>() {
    @Override
    public void onSuccess(List<Object> objects) {
        for (Object object : objects) {
            if (object instanceof UserModel) {
                userModelArrayList.add(userModel);
            } else if (object instanceof LikeModel) {
                likeModelArrayList.add(likeModel);
            }
        }
    }
});

Теперь у вас будет каждый список, заполненный соответствующим типом объекта.

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