如何将改装和LocalDB请求结合起来,并将结果提供给MVVM中的RecyclerView



我想从改造中获得结果,如果可能的话,将这些数据发送到recycleview适配器,如livedata,并保存在本地数据库中。如果改造无法获得结果数据,则应从本地数据库加载。我在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无法应用于一次性"。如果网络不可用->致命异常:main LiveData不处理错误。来自发布者的错误应该向上游处理,并作为状态传播。

您可以直接将数据存储在数据库中。如果您使用Room(SQLite的ORM(,它可以发出实时数据。你只需要在你的活动中设置一个观察者。当数据库发生更改时,更改将自动传播到您的UI

最新更新