android - 将 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);
我将不胜感激有关如何正确执行此操作的一些见解
解决方案
这与您的其他问题相同。请确保您学习更多有关 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();
推荐阅读
- networking - 智能手机中的数据链路层和物理层设备
- wso2 - 无法在 WSO2 API Manager 3.1.0 中启用 MailtoSender
- reactjs - 如何在另一个组件中使用一个组件的状态?独立组件(React)
- karate - 如何删除空手道中的多个数组对象?
- c++ - 将错误记录到 rsyslog 数据库会给出不正确的优先级枚举
- mysql - 这是应该使用窗口功能的情况吗?
- javascript - C3js:单个数据中的多色线
- scrapy - 自定义中间件导致重复过滤器过滤掉所有请求
- html - flexbox 表中的粘性标题不粘性
- material-ui - 有什么办法可以改变material-ui标签指示器的背景颜色悬停和标签的活动状态