我需要在android中处理启动完成意图,然后我需要进行4次网络调用以获取数据,然后需要比较每个项目并在通知时发送通知。
我尝试编写此代码,但它无效。
subscription = provider
.getAllItems()
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<List<ContentValues>>() {
@Override
public void onCompleted() {
if (!subscription.isUnsubscribed()) {
subscription.unsubscribe();
}
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(List<ContentValues> list) {
for(ContentValues contentValues : list) {
Long currentTime = (Long)contentValues.get(EquakeContract.EarthQuakeEntry.TIME);
Double mag = (Double) contentValues.get(EquakeContract.EarthQuakeEntry.MAGNITIUTE);
if(currentTime >time && mag > Double.parseDouble(minMagnitude)) {
sendNotification(contentValues);
}
}
}
});
正在调用此函数
public Observable<List<ContentValues>> getAllItems() {
return api.getEquakeItems();
}
它正在调用此函数
public Observable<List<ContentValues>> getEquakeItems() {
return getCategoryList()
.flatMapIterable(new Func1<List<String>, List<String>>() {
@Override
public List<String> call(final List<String> dataSnapshot) {
return dataSnapshot;
}
})
.flatMap(new Func1<String, Observable<EarthQuake>>() {
@Override
public Observable<EarthQuake> call(final String categoryId) {
return equakeService.getEarthQuakeItems(categoryId);
}
})
.map(new Func1<EarthQuake, List<ContentValues>>() {
@Override
public List<ContentValues> call(final EarthQuake earthQuake) {
String[] data = earthQuake.getMetadata().getUrl().split("/");
String categoryId = data[data.length-1].split(".")[0];
Log.e("CategoryId",categoryId);
return mapItems(earthQuake,categoryId);
}
});
}
由于未执行return语句,因此无法获取数据。我不知道我在这里做了什么错。
我需要在第一个函数中列出数据。
我是rxjava的新手,所以任何帮助都会受到赞赏。
我在意向服务中运行此操作,因为我需要解析内容值列表并发送通知
我得到arrayindexoutofbound异常,但不知道在哪里?
我正在获得如下所示的可观察列表
public Observable<List<String>> getCategoryList() {
return Observable.from(Arrays.asList(EarthQuakeConstants.SIGNIFICANT_CATEGORY,EarthQuakeConstants.ONE_END_CATEGORY,EarthQuakeConstants.TWO_FIVE_CATEGORY,EarthQuakeConstants.ALL_END_CATEGORY,EarthQuakeConstants.FOUR_FIVE_CATEGORY)).toList();
}
并在每个项目上进行1次网络通话。