Pregunta

Tengo una aplicación de Android que consume servicios de descanso utilizando AndroidAnnotations y plantilla de descanso de primavera.

Los servicios se están consumiendo correctamente, pero cuando el servicio de descanso lanza una excepción no controlada, la aplicación Android se detiene en funcionamiento y está cerrada, incluso con la captura de intentos que abarca el consumo de servicios.

Android-Aplicación:

@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...
    }
}

Aplicación de descanso:

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

Sé que la excepción no se está tratando en un servicio reparador, pero quiero que mi aplicación de Android pueda captar este tipo de problema y mostrar un mensaje amigable para el usuario. Pero el siguiente error se produce incluso con la prueba intente:

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)

Repositorio de git Si desea ver todo el proyecto: https://github.com/veniltonjr/msploring

ya, gracias!

¿Fue útil?

Solución

La forma de mostrar al usuario Un mensaje amigable en caso de excepción del servidor es devolver un código de estado de error de Jersey y luego el lado de Android puede manejar esta respuesta y hacer la acción para mostrar un mensaje al usuario que algo sale mal.

Entonces, en su código de Jersey, puede agregar un manejo de excepciones:

@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;
}

En el lado de Android, puede capturar la entidad de error String GreenacodiCetGode y luego puede mostrar el mensaje apropiado al usuario sobre lo que sucedió.Por ejemplo:

Lado de Android:

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

Esto asegurará que, en caso de excepción de reposo, el cliente Android puede manejar el error y mostrar un mensaje al usuario.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top