有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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

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;
        }
    }
} 

我的另一个获取位置的类可以在here中找到。至于预测,这只是改装
我将如何在存储库中组合这些元素


共 (1) 个答案

  1. # 1 楼答案

    我也面临同样的问题。基本上,您希望在Repository中写入逻辑,该逻辑决定是从服务器还是本地数据库获取数据。 幸运的是,这是一个非常常见的问题,因此谷歌制作了NetworkBoundResource

    NetworkBoundResource是一个普通类,它利用MediatorLiveData的强大功能在本地数据库和web服务之间进行数据流

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

    和正式文件:https://developer.android.com/jetpack/docs/guide