Я создаю приложение, которое берет список приложений, установленных на устройстве, и проверяет наличие обновлений версий в магазине Google Play.
Это мой метод получения информации о приложении на основе имени пакета:
public Observable<DetailsResponse> getUpdates(@NonNull List<ApplicationInfo> apps) {
return Observable.fromIterable(apps)
.flatMap(appInfo -> googlePlayApiService.getDetails(appInfo.packageName));
}
Работает нормально, если пакет действительно находится в магазине Google Play, но возвращает retrofit2.adapter.rxjava2.HttpException: HTTP 404
, если имя пакета не найдено (ie: загруженное приложение)
Это мой метод обработки наблюдаемых:
updatesViewController.getUpdates(apps)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.as(AutoDispose.autoDisposable(ViewScopeProvider.from(this)))
.subscribe(responseItem -> responseList.add(responseItem),
throwable -> responseList.add(null), //404's here, doesn't do the onComplete at all.
() -> { // onComplete
for (int i = 0; i < apps.size(); ++i) {
if (responseList.get(i) != null && apps.get(i).isLowerVersion(responseList.get(i)) {
doSomething();
}
});
Если все приложения находятся в PlayStore, это работает как задумано. Я хочу сделать так, чтобы, если одно или несколько приложений не были найдены в игровом магазине, они все равно могли делать doSomething () с найденными приложениями, игнорируя приложения, которых нет. Любая помощь приветствуется!