使用LiveData预先填充Room数据库以从不同的API端点获取数据

时间:2018-08-10 11:21:48

标签: android retrofit2 android-room android-livedata

我必须显示一只狗的名单(它们的名字),并且还要为每只狗显示其主人的名字。

但是问题是我必须从两个不同的端点获取数据:

端点1:获取人员列表

JSON响应:

[{
    "id" : 1,
    "name": "Mike"
},
{
    "id" : 1,
    "name": "Joan"
}]

端点2:获取狗的列表

Json响应:

[{
    "id" : 1,
    "userId" : 1 
    "name": "Doggity"
},
{
    "id" : 2,
    "userId" : 1 
    "name": "Doggo"
},
{
    "id" : 3,
    "userId" : 2 
    "name": "Doggy"
}]

当我需要显示狗的列表时,我已经有了它们的主人的列表。因此,我必须用这些数据(从服务器中获取)预先填充会议室数据库。

但是我不知道该怎么做,因为LiveData仅从一个端点获取数据。我的意思是,如果我需要列出狗(端点2),我会这样做:

mDogListViewModel.getDogs()
            .observe(this, this::response);

这就是存储库的作用:

public LiveData<Response<List<Dog>>> getListDogs() {
    return new NetworkBoundResource<List<Dog>,List<Dog>>(mAppExecutors) {

        @Override
        protected void saveCallResult(@NonNull List<Dog> item) {
            mDogDao.insertDogs(item);
        }

        @Override
        protected boolean shouldFetch(@Nullable List<Dog> data) {
            return data == null || data.isEmpty();
        }

        @NonNull
        @Override
        protected LiveData<List<Dog>> loadFromDb() {
            return mDogDao.findAll();
        }

        @NonNull
        @Override
        protected LiveData<ApiResponse<List<Dog>>> createCall() {
            return mService.getDogs();
        }
    }.asLiveData();
}

但是我需要知道所有者的名字。因此,在获取端点2数据之前,我需要获取端点1数据。

我需要什么?

预先填充数据,并将其保存到我的房间中数据库中有一个包含用户的表和一个有狗的表,因此当我需要列出我已经拥有它们的所有者的dos时。

预填充Room数据库的最佳做法是什么?我是否需要LiveData来预填充Room数据库?

谢谢。

0 个答案:

没有答案