2014-01-02 3 views
4

У меня есть следующий метод, поднять исключение:Google Cloud Endpoints пользовательских исключения

@ApiMethod(name = "login") 
public Profile getLogin(User user) throws UnauthorizedException { 

    if (user == null){ 
     throw new UnauthorizedException("missing user"); 
    } 

    ... 
} 

Как поймать ошибку в андроиде клиента AsyncTask?

protected Profile doInBackground(Void... unused) { 

    Profile profile = null; 
    try { 
     profile = service.login().execute(); 

    } catch (Exception e) { 
     Log.d("exception", e.getMessage(), e); 
    } 

    return profile; 
} 

Вышеупомянутое не поймало UnauthorizedException.

+0

Вы нашли решение на этом? Попытка выяснить то же самое. Дело в том, что, когда back-end генерирует исключение - back-также ловит его и просто отправляет вам ошибку HTTP. Ключ должен был настроить эту HTTP-ошибку. – Sti

ответ

0

Исключение происходит на сервере App Engine, а не на клиенте Android. Затем вы должны найти способ отправить сообщение клиенту, чтобы сообщить ему, какое исключение произошло.

В облачных конечных точках и других API REST это делается с использованием кода результата HTTP и сообщения о результатах HTTP.

Документация по облачным конечным точкам поясняет how to match a custom exception to an HTTP result code. Однако в вашем случае вы также можете использовать предоставленный com.google.api.server.spi.response.UnauthorizedException. Это переведёт в код HTTP 401, что является способом HTTP сказать «несанкционированный».

Я никогда не пробовал Cloud Endpoints на Android, но если вы проверите класс исключения, вы наверняка увидите, что есть способ получить код ошибки HTTP.

Смежные вопросы