Вопрос

У меня есть приложение для Android, которое использует службы RESTful с использованием AndroidAnnotations и шаблона Spring Rest.

Службы используются правильно, но когда служба RESTful выдает необработанное исключение, приложение Android перестает работать и закрывается, даже если попытка catch охватывает потребление службы.

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

Уже, спасибо!

Это было полезно?

Решение

Способ показать пользователю дружелюбное сообщение в случае исключения сервера — вернуть код состояния ошибки из Джерси, а затем сторона 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 клиент Android сможет обработать ошибку и отобразить сообщение пользователю.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top