RxAndroid 2.x subscribe 疑问

2019-05-01 10:33:39 +08:00
 gigayou

以下为我的代码

@POST("/hospital/department/list")
    Observable<ResponseBody> list(@Body Department department);
public Observable<String> list(Department department) {
        return departmentAPI.list(department)
                .flatMap((Function<ResponseBody, ObservableSource<String>>) responseBody -> Observable.just(responseBody.string()));
    }
 private void initDepOptions() {
        final ProgressDialog progressDialog = new ProgressDialog(getContext());
        depDataManager.list(tDepartment)
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .doOnSubscribe(disposable -> {
                    progressDialog.setMessage(LOADING_MESSAGE);
                    progressDialog.show();
                })
                .doOnComplete(() -> progressDialog.dismiss())
                .subscribe(new RxSubscriber<String>() {
                    @Override
                    public void onNext(String s) {
                        ApiResponse response = GsonParser.fromJSONObject(s, ApiResponse.class);
                        if (response.success()) {
                            transform2DepartmentList(response.data);
                        } else {
                            Toasty.error(getContext(), response.message, Toast.LENGTH_LONG, true).show();
                        }
                    }
                });
    }

我准备用其来获取服务端 json 数据并反序列化,可是这时候出现了一个问题,subscribe 中的 onNext 方法并未执行...

ps:
RxSubscriber

public class RxSubscriber<T> extends DisposableObserver<T> {
    
    @Override
    public void onNext(@NonNull T t) {
        
    }
    
    @Override
    public void onError(@NonNull Throwable e) {
        
    }
    
    @Override
    public void onComplete() {
        
    }
}
8099 次点击
所在节点    Android
5 条回复
YellowLittleDog
2019-05-01 22:04:36 +08:00
你有没有看看 onerror 是否执行了
mxalbert1996
2019-05-01 22:55:58 +08:00
首先网络请求应该用 Single 而不是 Observable。
然后第二段代码里为什么要用 flatMap ?直接 map(responseBody -> responseBody.string() 不就行了?
mxalbert1996
2019-05-01 23:06:32 +08:00
另外第三段代码里的 subscribe(DisposableObserver)我在 API 文档里没找到,应该是 subscribeWith ?
kuyuzhiqi
2019-05-01 23:32:31 +08:00
先只保留最主要的逻辑,用最简单的写法,注释掉 ProgressDialog 这些无关的代码,看看哪里出了问题,再加其它的功能
Yyyye
2019-05-01 23:45:11 +08:00
那就是走 OnError 了 没的套路了,小 bug!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/560306

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX