我想从改造中获得结果,如果可能的话,将此数据发送到livelive之类的recyclerview适配器,并保存在本地数据库中。如果改造无法获得结果数据,则应从本地数据库加载。我在MainActivity中的代码:
private void initRecyclerView() {
recyclerView = binding.rvTasks;
recyclerView.setLayoutManager(new LinearLayoutManager(this));
TaskAdapter adapter = new TaskAdapter();
recyclerView.setAdapter(adapter);
viewModel.getTasks().observe(this, tasks -> {
adapter.setTaskCollection(tasks);
});
}
然后,在MainActivityVeiwModel中:
public LiveData<List<Task>> getTasks() {
return LiveDataReactiveStreams.fromPublisher(retrofitApi.getTasks()
.subscribeOn(Schedulers.io())
.doOnError(throwable -> dataStorage.getTaskCollection())
);
和数据存储:
public Flowable<List<Task>> getTaskCollection() {
List<Task> taskList = new ArrayList<>();
for (Map.Entry<Integer, Task> entry : localDatabase.getTaskCollention().entrySet())
taskList.add(entry.getValue());
return Flowable
.just(taskList);
}
如果连接了网络,则进行翻新,以加载数据,但是我无法通过订阅保存它,原因是“ LiveDataReactiveStreams无法应用于Disposable”。如果网络不可用->致命异常:主LiveData不处理错误。来自发布者的错误应在上游处理并作为状态传播。
您可以直接在db中存储数据。如果使用Room(SQLite的ORM),它可以发出实时数据。您只需要在活动中设置观察者即可。当数据库更改时,更改将自动传播到您的UI