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