gpt4 book ai didi

java - 如何结合Retrofit和LocalDB请求并将结果提供给MVVM中的RecyclerView?

转载 作者:行者123 更新时间:2023-12-01 22:14:56 24 4
gpt4 key购买 nike

我想获得改造的结果,如果可能的话,将此数据发送到recyclerview适配器(如livedata)并保存在本地数据库中。如果 Retrofit 无法获取结果数据,则应从本地数据库加载。我在 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),它可以发出实时数据。您只需要在您的 Activity 中设置一个观察者即可。当数据库更改时,更改将自动传播到您的 UI

关于java - 如何结合Retrofit和LocalDB请求并将结果提供给MVVM中的RecyclerView?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58635646/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com