Я создаю приложение в соответствии с рекомендациями по архитектуре. Реализовано кэширование БД комнаты + сеть. Необходимо получить последний номер страницы из отдельного объекта.
Моя модель:
@Entity(tableName = "top_rated_movie_page")
public class Top_Rated_Movies_Page {
@PrimaryKey(autoGenerate = true)
private int db_id;
private Integer page;
private Integer total_results;
private Integer total_pages;
@Ignore
private List<Result> results;
...
Result
содержит данные, которые я отображаю в своем постраничном списке, который наблюдает за изменениями из db.
Используя PagedList.BoundaryCallback
, мне нужно получить новые данные из сети и вставить их в БД. Но мне нужно как-то получить номер страницы. Мой дао:
@Insert
void insertAll(Top_Rated_Movies_Page page,List<Result> top_rated_results);
@Query("SELECT * FROM Result")
DataSource.Factory<Integer, Result> getAllResults();
@Query("SELECT * FROM top_rated_movie_page WHERE page= (SELECT MAX(page) FROM top_rated_movie_page)")
LiveData<Top_Rated_Movies_Page> getMoviePage();
Я думал наблюдать Top_Rated_Movies_Page
из db в моем классе репозитория с observeForever()
, чтобы получить этот номер страницы. Это лучший способ приблизиться к этому?
observeForever
и не иметь LifecycleOwner, вместо этого вы должны использоватьTransformations.switchMap
. - person EpicPandaForce   schedule 11.06.2020