Rxjava没有返回数据

时间:2018-04-21 18:10:37

标签: android rx-java

我需要在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次网络通话。

0 个答案:

没有答案