Question

J'ai une application Android qui consomme des services reposants utilisant des androidannotations et un modèle de repos à ressort.

Les services sont consommés correctement, mais lorsque le service réparateur jette une exception non confondue, l'application Android s'arrête en cours d'exécution et est fermée, même avec l'essai de capture englobant la consommation de service.

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

Apple-app:

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

Je sais que l'exception n'est pas traitée dans un service reposant, mais je veux que mon application Android puisse attraper ce type de problème et afficher un message convivial à l'utilisateur. Mais l'erreur suivante se produit même avec l'essai attraper:

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 S'ils veulent regarder tout le projet: https://github.com/veniltonjr/msplelarning

Déjà, merci!

Était-ce utile?

La solution

Le moyen de montrer à l'utilisateur un message convivial en cas d'exception du serveur consiste à renvoyer un code d'état d'erreur de Jersey, puis le côté Android peut gérer cette réponse et faire l'action pour afficher un message à l'utilisateur que quelque chose ne va pas.

Donc, dans votre code de maillot, vous pouvez ajouter une manipulation des exceptions:

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

sur le côté Android, vous pouvez attraper la chaîne d'entité d'erreur "Got some errors due to ...!", puis vous pouvez afficher le message approprié à l'utilisateur sur ce qui s'est passé.Par exemple:

côté Android:

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

Cela garantira que, en cas d'exception de repos, le client Android peut gérer l'erreur et afficher un message à l'utilisateur.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top