首页 > 解决方案 > 将 AsyncTask 转换为 RxJava

问题描述

我有一个获取 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);

我将不胜感激有关如何正确执行此操作的一些见解

标签: androidrx-javarx-java2

解决方案


这与您的其他问题相同。请确保您学习更多有关 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();

推荐阅读