如何结合翻新和LocalDB请求并将结果提供给MVVM中的RecyclerView?

问题描述 投票:0回答:1

我想从改造中获得结果,如果可能的话,将此数据发送到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不处理错误。来自发布者的错误应在上游处理并作为状态传播。

java android mvvm rx-java android-livedata
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.