改造没有返回任何回复

时间:2014-07-23 00:13:29

标签: android gson retrofit

我正在尝试使用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块?

为什么会这样,没有结果,没有捕获。我怎么能纠正这个?

1 个答案:

答案 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。