我正在创建一个应用程序,它获取设备上安装的应用程序列表并检查来自 google play 商店的版本更新。
这是我根据包名获取应用信息的方法:
public Observable<DetailsResponse> getUpdates(@NonNull List<ApplicationInfo> apps) {
return Observable.fromIterable(apps)
.flatMap(appInfo -> googlePlayApiService.getDetails(appInfo.packageName));
}
如果包实际上在 google play store 上,它可以正常工作,但retrofit2.adapter.rxjava2.HttpException: HTTP 404
如果找不到包名,它会返回(即:sideloaded app)
这是我处理 observables 的方法:
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 上,则按预期工作。我想这样做,如果在 Playstore 中找不到一个或多个应用程序,它仍然可以对找到的应用程序执行 doSomething(),而忽略没有的应用程序。任何帮助表示赞赏!