2014-01-11 78 views
1

我有一個Android應用程序,使用AndroidAnnotations和Spring Rest模板使用RESTful服務。Android不記得澤西島RESTful例外

服務正在被正確使用,但是當RESTful服務拋出一個未處理的異常時,Android應用程序將停止運行並關閉,即使try try包含服務消耗。

Android的應用程序:

@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服務治療,但我想我的Android應用程序可以捕獲這種類型的問題並向用戶顯示友好的信息。 不過,即使有嘗試捕捉出現以下錯誤:

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

在服務器異常的情況下向用戶顯示友好的消息的方式是從澤西返回錯誤狀態代碼,然後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; 
} 

在Android端,您可以捕獲錯誤實體字符串"Got some errors due to ...!",然後你可以到發生了什麼用戶顯示相應的消息。例如:

的Android側:

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

這將確保在REST異常的情況下,機器人客戶機可以處理該錯誤並顯示一條消息向用戶。

+0

感謝@tonga,我的問題發生是因爲我的方法'insert'有註解@Background,並且這忽略了我的trycath塊。 – falvojr