2014-07-23 38 views
0

我試圖使用RetroFitSynchronus調用來連接並獲取數據到我的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

改裝將所有內部異常包裝成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。