2014-01-11 3 views
1

AndroidAnnotations 및 Spring Rest Template을 사용하여 RESTful 서비스를 사용하는 Android 애플리케이션이 있습니다.Android가 Jersey RESTful 예외를 catch하지 않습니다.

서비스가 제대로 소비되고 있지만 RESTful 서비스가 처리되지 않은 예외를 throw하면 Android 애플리케이션이 실행을 멈추고 서비스 이용을 포괄하는 try catch와 함께 종료됩니다.

안드로이드 응용 프로그램 :

@RestService 
protected StudentRESTfulClient mStudentRESTfulClient; 

@Click(R.id.register_button) 
public void register(Student user) { 
    try { 
     this.mStudentRESTfulClient.insert(user); 
    } catch (Exception exception) { 
     // This block is not executed... 
    } 
} 

편안한-응용 프로그램 :

@POST 
public Student insert(Student entity) { 
    this.getService().insert(entity); // Throw the exception here! 
    return entity; 
} 

나는 예외가 RESTful 서비스에서 처리되지 않는 것을 알고 있지만, 내 안드로이드 응용 프로그램에서이 유형을 잡을 수 있기를 바랍니다. 문제를 표시하고 사용자에게 친숙한 메시지를 표시합니다. 그러나 다음과 같은 오류조차 시도 캐치 발생 :

01-11 00:44:59.046: E/AndroidRuntime(5291): FATAL EXCEPTION: pool-1-thread-2 
01-11 00:44:59.046: E/AndroidRuntime(5291): org.springframework.web.client.HttpServerErrorException: 500 Internal Server Error 
01-11 00:44:59.046: E/AndroidRuntime(5291): at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:78) 
01-11 00:44:59.046: E/AndroidRuntime(5291): at org.springframework.web.client.RestTemplate.handleResponseError(RestTemplate.java:524) 

Git 저장소가 전체 프로젝트를보고 싶은 경우 : 이미 https://github.com/veniltonjr/msplearning

, 감사합니다!

답변

2

서버 예외 상황에서 사용자에게 친숙한 메시지를 표시하는 방법은 Jersey에서 오류 상태 코드를 반환 한 다음 Android 측에서이 응답을 처리하고 사용자에게 무언가가 잘못되었다는 메시지를 표시하는 작업을 수행 할 수 있습니다 .

그래서 뉴저지 코드에서, 당신은 예외 처리를 추가 할 수 있습니다

안드로이드 측면에서
@POST 
public Response insert(Student entity) { 
    Response r; 
    try { 
     this.getService().insert(entity); // Throw the exception here! 
     r = Response.ok().entity(entity).build(); 
    } catch (Exception ex) { 
     r = Response.status(401).entity("Got some errors due to ...!").build(); 
    } 
    return r; 
} 

, 당신은 오류 개체 문자열 "Got some errors due to ...!"을 잡을 수 있습니다 그리고 당신은 무슨 일이 있었는지에 대해 사용자에게 적절한 메시지를 표시 할 수 있습니다.

안드로이드 사이드 : 예를 들어

HttpClient client = new DefaultHttpClient(); 
HttpResponse response = client.execute(post); 
String responseText = EntityUtils.toString(response.getEntity()); 

이 그 REST 예외의 경우, 안드로이드 클라이언트 오류를 ​​처리 할 수 ​​있도록하며, 사용자에게 메시지를 표시.

+0

감사합니다. @tonga 내 메서드'insert'에 @Background 주석이 있었기 때문에 내 trycath 블록이 무시되었습니다. – falvojr

관련 문제