База данных андроид mvvm глубокая структура

Я новичок в Android. Я пытаюсь разработать приложение с новой архитектурой MVVM Android. Со ссылкой на пример кода Google GitHub ниже:

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"
  }
] 

Но я сталкиваюсь с проблемой детальной активности.

{
  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();
   }

0 ответов

Другие вопросы по тегам