V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
gigayou
V2EX  ›  Android

RxAndroid 2.x subscribe 疑问

  •  
  •   gigayou · 2019-05-01 10:33:39 +08:00 · 8097 次点击
    这是一个创建于 2027 天前的主题,其中的信息可能已经有所发展或是发生改变。

    以下为我的代码

    @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() {
            
        }
    }
    
    5 条回复    2019-05-01 23:45:11 +08:00
    YellowLittleDog
        1
    YellowLittleDog  
       2019-05-01 22:04:36 +08:00 via Android
    你有没有看看 onerror 是否执行了
    mxalbert1996
        2
    mxalbert1996  
       2019-05-01 22:55:58 +08:00 via Android
    首先网络请求应该用 Single 而不是 Observable。
    然后第二段代码里为什么要用 flatMap ?直接 map(responseBody -> responseBody.string() 不就行了?
    mxalbert1996
        3
    mxalbert1996  
       2019-05-01 23:06:32 +08:00 via Android
    另外第三段代码里的 subscribe(DisposableObserver)我在 API 文档里没找到,应该是 subscribeWith ?
    kuyuzhiqi
        4
    kuyuzhiqi  
       2019-05-01 23:32:31 +08:00
    先只保留最主要的逻辑,用最简单的写法,注释掉 ProgressDialog 这些无关的代码,看看哪里出了问题,再加其它的功能
    Yyyye
        5
    Yyyye  
       2019-05-01 23:45:11 +08:00
    那就是走 OnError 了 没的套路了,小 bug!
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2774 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 19ms · UTC 08:41 · PVG 16:41 · LAX 00:41 · JFK 03:41
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.