gpt4 book ai didi

java - 使用存储库在本地数据库/位置和网络之间同步

转载 作者:行者123 更新时间:2023-11-29 16:43:46 25 4
gpt4 key购买 nike

我正在实现一个天气应用程序,它通过 Retrofit 从 DarkSky 获取天气预报,并从 GoogleFusedLocationClient 获取位置。我的目标是通过应用程序关闭和配置更改来保存 UI 数据。我使用 Room+ViewModel+LiveData 和 Repository 模型实现了它。但我在 fragment 中获取位置和预测,而不是在存储库中,目标是将其移动到存储库。
这样存储库就会查看数据库,如果数据库为空,则从网络获取数据。
我当前的存储库:

public class UIRepository {

private UIDao mUIDao;
private LiveData<List<UIData>> mAllUIData;

UIRepository(Application application) {
PhotoDatabase db = PhotoDatabase.getDatabase(application);
mUIDao = db.uiDao();
mAllUIData = mUIDao.getAllUIData();
}

LiveData<List<UIData>> getAllUIData() {
return mAllUIData;
}

public void insert(UIData uiData) {
new insertAsyncTask(mUIDao).execute(uiData);
}

private static class insertAsyncTask extends AsyncTask<UIData, Void, Void> {

private UIDao mAsyncDao;

insertAsyncTask(UIDao uiDao) {
mAsyncDao = uiDao;
}

@Override
protected Void doInBackground(UIData... uiData) {
mAsyncDao.insert(uiData[0]);
return null;
}
}
}

可以找到我用于获取位置的单独类(class) here 。对于预测来说,这只是改造。
我将如何组合存储库中的这些元素?

最佳答案

我也遇到了同样的问题。基本上,您想在存储库中编写逻辑,决定是否从服务器或本地数据库获取数据。幸运的是,这是一个非常常见的问题,因此 Google 制作了 NetworkBoundResource类。

NetworkBoundResource 是一个普通类,它使用 MediatorLiveData 的功能完成本地数据库和 Web 服务之间的数据流工作。

了解更多信息:https://proandroiddev.com/building-modern-apps-using-the-android-architecture-guidelines-3238fff96f14

及官方文档:https://developer.android.com/jetpack/docs/guide

关于java - 使用存储库在本地数据库/位置和网络之间同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49470466/

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