gigayou
V2EX  ›  Android

RxAndroid 2.x subscribe 疑问

  •  
  •   gigayou · May 1, 2019 · 12274 views
    This topic created in 2579 days ago, the information mentioned may be changed or developed.

    以下为我的代码

    @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 replies    2019-05-01 23:45:11 +08:00
    YellowLittleDog
        1
    YellowLittleDog  
       May 1, 2019 via Android
    你有没有看看 onerror 是否执行了
    mxalbert1996
        2
    mxalbert1996  
       May 1, 2019 via Android
    首先网络请求应该用 Single 而不是 Observable。
    然后第二段代码里为什么要用 flatMap ?直接 map(responseBody -> responseBody.string() 不就行了?
    mxalbert1996
        3
    mxalbert1996  
       May 1, 2019 via Android
    另外第三段代码里的 subscribe(DisposableObserver)我在 API 文档里没找到,应该是 subscribeWith ?
    kuyuzhiqi
        4
    kuyuzhiqi  
       May 1, 2019
    先只保留最主要的逻辑,用最简单的写法,注释掉 ProgressDialog 这些无关的代码,看看哪里出了问题,再加其它的功能
    Yyyye
        5
    Yyyye  
       May 1, 2019
    那就是走 OnError 了 没的套路了,小 bug!
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2606 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 83ms · UTC 15:40 · PVG 23:40 · LAX 08:40 · JFK 11:40
    ♥ Do have faith in what you're doing.