База данных андроид 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();
}