Я хочу получить результат от модернизации, если это возможно, отправить эти данные в адаптер повторного просмотра, например, liveata, и сохранить их в локальной БД. Если модификация не может получить данные результатов, она должна загружаться из локальной базы данных. Мой код в 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())
);
и DataStorage:
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 не может быть применен к Одноразовому». Если сеть недоступна -> FATAL EXCEPTION: main LiveData не обрабатывает ошибки. Ошибки от издателей должны обрабатываться и распространяться как состояние.