将 AsyncTask 转换为 RxJava

Converting AsyncTask to 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);

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

这与您的其他问题的情况相同。请确保你研究了更多关于 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();