我正在尝试使用RetroFit Synchronus
调用来连接和获取我的某个API。
try{
RestAdapter restAdapter = new RestAdapter.Builder().setEndpoint(finalUri.toString()).build();
IGooglePlacesApi iGPlaceApi = restAdapter.create(IGooglePlacesApi.class);
mGooglePlacesApiResponse googlePlacesObj = iGPlaceApi.getStreams();
RetrofitError retrofitError;
} catch (IOException e) {
serverResponse = e.getMessage();
} catch (IllegalArgumentException e) {
serverResponse = e.getMessage();
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
Log.d("serverResponse:", serverResponse);
}
这里声明为:
public interface IGooglePlacesApi {
@GET("/stream/list.json")
mGooglePlacesApiResponse getStreams();
}
问题是当我打电话给iGPlaceApi.getStreams();
时我没有得到任何错误的结果。但我的代码只是直接进入finally块?
为什么会这样,没有结果,没有捕获。我怎么能纠正这个?
答案 0 :(得分:0)
Retrofit将所有内部异常包装到RetrofitError异常中并抛出该异常。在您的情况下,您没有捕获该异常,因此只执行finally块。
尝试以这种方式修改代码,
try {
RestAdapter restAdapter = new RestAdapter.Builder().setEndpoint(finalUri.toString()).build();
IGooglePlacesApi iGPlaceApi = restAdapter.create(IGooglePlacesApi.class);
mGooglePlacesApiResponse googlePlacesObj = iGPlaceApi.getStreams();
} catch (RetrofitError e) {
serverResponse = e.getMessage();
} finally {
Log.d("serverResponse:", serverResponse);
}
根据失败而抛出的RetrofitError将包含异常原因或服务器报告的状态。然后,您可以从那里应用必要的逻辑。
为了更一般的目的错误处理,您可以在创建RestAdapter时设置ErrorHandler。在捕获try / catch中的RetrofitError之前,将执行此ErrorHandler。