Я загружаю данные из API в адаптер, когда пользователь щелкает по нему, он загружается с помощью DownloadManager, а затем я использую вещатель, чтобы сообщить моей активности идентификатор загрузки и гиперссылка (уникальный идентификатор для комнаты).
До сих пор я не мог понять, как лучше всего использовать тот же наблюдатель, что и вначале, это просто получение данных (у которых нет downloadId), а затем прохождение через идентификатор downloadId и гиперссылку на хранилище. До сих пор я мог делать это успешно из репозитория в виде жестко закодированных данных.
Моя ViewModel:
@Inject
ItemViewModel(@NonNull ItemRepository itemRepository){
items = Transformations.switchMap(query, search -> {
if (search == null){
return AbsentLiveData.create();
}
// Transformations.switchMap(downloadable, inner -> {
// itemRepository.getDBItems(search, inner.getHyperlink(), inner.getDownloadId());
// });
return itemRepository.getDBItems(search, null, 0);
});
Поскольку я не могу получить данные из загружаемого без выполнения switchMap, и Я не могу получить itemRepository.getDBItems без его возврата, я застрял.
Мой результат трансляции:
@Override
public void onReceiveResult(int resultCode, Bundle resultData) {
if (resultCode == DOWNLOAD_ID){
Item i = new Item();
i.setHyperlink(resultData.getString("hyperlink"));
i.setDownloadId(resultData.getLong("downloadId"));
itemViewModel.setDownloadable(i);
}
}