Domanda

Ho un'applicazione Android che consuma servizi riposanti utilizzando Androidannotazioni e modello di riposo a molla.

I servizi vengono consumati correttamente, ma quando il servizio riposo genera un'eccezione non gestita, l'applicazione Android si arresta di funzionare ed è chiusa, anche con il calibro di prova che comprende il consumo di servizio.

Android-app:

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

Respul-app:

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

So che l'eccezione non viene trattata in servizio riposante, ma voglio che la mia applicazione Android possa catturare questo tipo di problema e visualizzare un messaggio amichevole all'utente. Ma il seguente errore si verifica anche con il fermo Prova:

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)
.

Repository Git Se vogliono guardare l'intero progetto: https://github.com/veniltonjr/msPlearning

Già, grazie!

È stato utile?

Soluzione

Il modo per mostrare all'utente un messaggio amichevole in caso di eccezione del server è restituire un codice di stato di errore da Jersey e quindi il lato Android può gestire questa risposta e eseguire l'azione per visualizzare un messaggio all'utente che qualcosa va storto.

Quindi nel codice Jersey, è possibile aggiungere la gestione delle eccezioni:

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

Sul lato Android, è possibile catturare la stringa di entità errori "Got some errors due to ...!" e quindi è possibile visualizzare il messaggio appropriato all'utente su ciò che è successo.Ad esempio:

Side Android:

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

Ciò garantirà che in caso di eccezione di riposo, Android client può gestire l'errore e visualizzare un messaggio all'utente.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top