我有一个Android应用程序,它使用AndroidAnnotations和Spring Rest Template来使用RESTful服务。
服务正在正常使用,但是当RESTful服务抛出未处理的异常时,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服务中没有处理异常,但我希望我的Android应用程序可以捕获此类问题并向用户显示友好消息。 但是即使使用try catch也会出现以下错误:
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
已经,谢谢!
答案 0 :(得分:2)
在服务器异常的情况下向用户显示友好消息的方法是从Jersey返回错误状态代码,然后Android端可以处理此响应并执行操作以向用户显示出现错误的消息。
因此,在您的Jersey代码中,您可以添加异常处理:
@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异常情况下,Android客户端可以处理错误并向用户显示消息。