我是 android 的初学者。我正在尝试使用新的 android MVVM 架构开发一个应用程序。参考下面GitHub的google示例代码:
https://github.com/googlesamples/android-architecture-components/tree/master/GithubBrowserSample
我正在使用 Room、Data Binding、Retrofit、Dagger 2
我开发的列表活动适用于上述架构
我的 API 电影列表响应:
[
{
id : 1,
name : "ABC"
},
{
id : 2,
name : "XYZ"
}
]
但我面临细节活动的问题我的电影细节 API 响应是:
{
id:1,
name : "ABC",
sources : [
{
sourceId : 1,
sourceName : "Source Name 1"
},
{
sourceId : 2,
sourceName : "Source Name 2"
}]
}
在我的应用程序中,我有 2 个实体 1.MovieEntity 2.MovieSourceEntity
按照我的存储库代码:
public LiveData<Resource<MovieEntity>> loadRepo(String id) {
return new NetworkBoundResource<MovieEntity, MovieEntity>(appExecutors) {
@Override
protected void saveCallResult(@NonNull MovieEntity item) {
movieDao.insert(item);
movieDao.insertSources(item.getSources());
}
@Override
protected boolean shouldFetch(@Nullable MovieEntity data) {
return data == null;
}
@NonNull
@Override
protected LiveData<MovieEntity> loadFromDb() {
return movieDao.load(id);
}
@NonNull
@Override
protected LiveData<ApiResponse<MovieEntity>> createCall() {
return movieService.getRepo(id);
}
}.asLiveData();
}
此代码仅返回 MovieEntity 数据 loadFromDb 不返回 MovieSourceEntity ListOfData 任何人都知道如何实现这一点
回答
public LiveData<Resource<MovieDetailEntity>> loadMovie(Integer id) {
return new NetworkBoundResource<MovieDetailEntity, MovieEntity>(appExecutors) {
@Override
protected void saveCallResult(@NonNull MovieEntity item) {
movieDao.saveMovie(item);
movieDao.saveMovieSources(item.getSources());
}
@Override
protected boolean shouldFetch(@Nullable MovieDetailEntity data) {
return data ==null || data.getSources() == null || data.getSources().isEmpty();
}
@NonNull
@Override
protected LiveData<MovieDetailEntity> loadFromDb() {
LiveData<MovieDetailEntity> movieEntity = movieDao.loadMovieDetail(id);
return movieEntity;
}
@NonNull
@Override
protected LiveData<ApiResponse<MovieEntity>> createCall() {
return movieDBService.loadMovie(id);
}
}.asLiveData();
}