1

我是 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();
   }
4

0 回答 0