2014-10-27 4 views
1

Я использую «Дооснащение» для передачи http.Модернизация: Пользовательский ErrorHandler, UndeclaredThrowableException

И я сделал обычай ErrorHandler, как показано ниже.

public class CustomErrorHandler implements ErrorHandler { 

    @Override 
    public Throwable handleError(RetrofitError cause) { 

     if (RetrofitError.Kind.NETWORK == cause.getKind()) { 

      Throwable throwable = cause.getCause(); 

      if (throwable instanceof SocketTimeoutException) 
       return throwable; 
      else if (throwable instanceof ConnectException) 
       return throwable; 
     } 

     return cause; 
    } 

} 

При попытке отладки, throwable является экземпляром SocketTimeoutException или ConnectException в CustomErrorHandler.handleError().

Но, ниже fucntion throws UndeclaredThrowableException.

private SignOutSuccessResponse trySignOut(String email, String userToken) throws Exception { 

    RestAdapter.Builder builder = new RestAdapter.Builder(); 
    builder.setEndpoint(ServerInfo.END_POINT_API); 
    builder.setErrorHandler(new CustomErrorHandler()); 

    if (BuildConfig.DEBUG) 
     builder.setLogLevel(RestAdapter.LogLevel.FULL); 

    API sessionAPI = builder.build().create(API.class); 
    return sessionAPI.signOut(email, userToken); 
} 

Как решить эту проблему не this way?

Я использую

  • Android студия
  • дооснащения 1.7.1
  • OkHttp 2.0.0

Пожалуйста, помогите мне ㅠㅠ

ответ

0

Оба SocketTimeException и ConnectException проверяются как вы, вероятно, уже знаете. Если вы не хотите объявлять свой интерфейс с проверенным исключением, как указано в ссылке, которую вы отправили, вам нужно будет обернуть оба исключения в исключенное исключение, прежде чем возвращать их.

+0

О, я не знал, что 'SocketTimeException' и' ConnectException' являются «проверенными исключениями». Спасибо! –