Преобразование AsyncTask в RxJava - PullRequest
0 голосов
/ 06 июля 2019

У меня есть проект, который извлекает уведомление OneSignal, и он работает нормально, но я хочу удалить AsyncTask и использовать вместо него RxJava.Я следовал некоторым примерам, но пока ничего не получалось.

Это реализация AsyncTask

NotificationDao mDAO;
List<Messages> mList = new ArrayList<>();
NotificationDatabase mDataBase;

mDataBase = NotificationDatabase.getInstance(this);
mDAO = mDataBase.notificationDao();


new AsyncTask<Void, Void, List<Messages>>() {

            @Override
            protected List<Messages> doInBackground(Void... voids) {
                return mDAO.getNotificationList();
            }

            @Override
            protected void onPostExecute(List<Messages> messages) {
                mList.clear();
                mList.addAll(messages);
                mAdapter.setData(messages);
                mAdapter.notifyDataSetChanged();

            }
        }.execute();

Я получаю исключение nullppinter здесь

mList.addAll(messages);

Я будуценим понимание того, как сделать это правильно

1 Ответ

0 голосов
/ 07 июля 2019

Это тот же сценарий с вашим другим вопросом.Пожалуйста, убедитесь, что вы изучили больше о реализации Rx, поскольку это поможет вам решить эти проблемы.

Single.fromCallable(new Callable<List<Messages>>() {
            @Override
            public List<Messages> call() throws Exception {
                return mDAO.getAllNotification();
            }
        })
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .doOnSuccess(new Consumer<List<Messages>>() {
                    @Override
                    public void accept(List<Messages> messages) throws Exception {
                        mList.clear();
                        mList.addAll(messages);
                        mAdapter.setData(messages);
                        mAdapter.notifyDataSetChanged();
                    }
                })
                .doOnError(new Consumer<Throwable>() {
                    @Override
                    public void accept(Throwable throwable) throws Exception {

                    }
                })
                .subscribe();
...