android - Retrofit Rxjava 在返回 String(不是Java bean)时没有走 rx 回调?
黄舟
黄舟 2017-04-18 09:06:57
0
4
669
  1. 当 是Javabean 时就能得到回调.
    之前提问匆忙没有贴代码,好多人要是没遇上还真不知道我在说啥.

代码片段如下:

public void getDemoData(Subscriber<String> subscriber){
        HttpService.getInstance()
                .create(DemoService.class)
                .getDemoPicture("params1",params2,params3,"params4")
                .subscribeOn(Schedulers.io())
                .unsubscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(subscriber);

    private void requestData() {
        HttpMethods.getInstance().getDemoData(new Subscriber<String>() {
            @Override
            public void onCompleted() {
               Toast.makeText(MainActivity.this, "ok", Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onError(Throwable e) {
                showToast(getResources().getString(R.string.error_data));
            }

            @Override
            public void onNext(String str) {
            //....
                }
            }
        });
    }
    private HttpService() {
        OkHttpClient.Builder httpClientBuilder = new OkHttpClient.Builder();
        httpClientBuilder.connectTimeout(DEFAULT_TIMEOUT, TimeUnit.SECONDS);

        HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
        interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
        httpClientBuilder.addInterceptor(interceptor).build();

        retrofit = new Retrofit.Builder()
                .client(httpClientBuilder.build())
                .addConverterFactory(GsonConverterFactory.create())
                .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
                .baseUrl(BingUrl.BING)
                .build();
    }

HttpLoggingInterceptor 能打印出请求成功状态和返回的数据,只是回调都没走

黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

全員に返信(4)
PHPzhong

私もこの問題に遭遇しました。つまり、エラーが発生した場合、オブジェクトは返されず、文字列が返され、解析できないのです。現時点では、ハードコードされたエラー メッセージが表示されるだけです。文字列解析を直接使用していますが、それを解決する方法があるかどうかはわかりません

いいねを押す +0
左手右手慢动作

String を返すことで確実に取得できます。ソースコードをどのように書いたかを教えてください。

いいねを押す +0
大家讲道理

何か問題が発生した場合は、onError で処理します

いいねを押す +0
Peter_Zhu

最初のメソッドで getDemoData に渡されるパラメーターは、SubscriberDemoService サブスクライバーString ではなく、Subscriber

サブスクライバーである必要があります。
いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート