1

如果響應不成功,我想在地圖中處理錯誤。我嘗試使用此文章Error handling in Retrofit中的RetrofitException,但沒有成功。地圖中的改造+ rx錯誤處理

這是我可觀察

public Observable<JsonElement> commonResponse(final Object request, String method, final Context context) { 

    Log.v("method", method); 
    //Create Request 
    Map<String, Object> data = ApiHelper.commonParams(request, method, context); 

    return apiService.commonResponse(method, data) 
      .subscribeOn(Schedulers.newThread()) 
      .observeOn(Schedulers.immediate()) 
      .map(new Func1<Response<BaseResponse>, JsonElement>() { 
       @Override 
       public JsonElement call(Response<BaseResponse> response) { 
        if (!response.isSuccessful()) { 
         //throwException(response);        

        } 

        BaseResponse baseResponse = response.body(); 
        return baseResponse.getData(); 
       } 
      }); 

} 

這是我改造

private static HttpLoggingInterceptor logging = new HttpLoggingInterceptor(); 

private static OkHttpClient.Builder httpClient = new OkHttpClient.Builder(); 

private static Retrofit.Builder builder = 
     new Retrofit.Builder() 
       .baseUrl(ApiService.API_URL) 
       .addConverterFactory(GsonConverterFactory.create()) 
       .addCallAdapterFactory(RxJavaCallAdapterFactory.create()); 

public static Retrofit retrofit = builder.client(httpClient.addInterceptor(logging.setLevel(HttpLoggingInterceptor.Level.BASIC)).build()).build(); 

public static ApiService retrofitCreate() { 
    return retrofit.create(ApiService.class); 
} 

回答

0

添加訂閱你Observerable我認爲會解決您的問題。在最後你的方法添加訂閱

   .subscribe(new Subscriber<YOUR_OBJECT>() { 
        @Override 
        public void onCompleted() { 

        } 

        @Override 
        public void onError(Throwable e) { 
         //handle your error here 
         showError(); 
        } 

        @Override 
        public void onNext(YOUR_OBJECT object) { 
        } 

查看更多here

+0

我有**訂閱**,它是在另一類。我需要傳遞從地圖到onError。 –

+0

@AlexCrow放入try catch和Observer.error(t)不能解決您的問題? – Amir