Я реализую простой вход в конечные точки с помощью Retrofit2. Все работает нормально, когда учетные данные пользователя верны, но ломаются, когда я пытаюсь ввести недопустимые данные. Я пытаюсь исправить ошибки, когда пользователь не найден, но я не могу найти способ сделать это. Ответ об ошибке выглядит так:
{
"0": [
"erreur",
"statut"
],
"erreur": "Erreur, connexion echoue.",
"statut": "KO"
}
Этот ответ имеет статус 200, несмотря на то, что он является ошибкой.
Приложение выдает сбой с NPE в LoginRepository, где я пытаюсь сохранить данные пользователя в SharedPreferences, потому что результат ошибки не обрабатывается, поэтому любой ответ приложения считается успешным.
Образец предоставляет класс Result, который, похоже, не работает для моего варианта использования, потому что ответ всегда успешен:
public class Result<T> {
// hide the private constructor to limit subclass types (Success, Error)
private Result() {
}
@Override
public String toString() {
if (this instanceof Result.Success) {
Result.Success success = (Result.Success) this;
return "Success[data=" + success.getData().toString() + "]";
} else if (this instanceof Result.Error) {
Result.Error error = (Result.Error) this;
return "Error[exception=" + error.getError().toString() + "]";
}
return "";
}
// Success sub-class
public final static class Success<T> extends Result {
private T data;
public Success(T data) {
this.data = data;
}
public T getData() {
return this.data;
}
}
// Error sub-class
public final static class Error extends Result {
private Exception error;
public Error(Exception error) {
this.error = error;
}
public Exception getError() {
return this.error;
}
}
}
А вот как я обрабатываю логин в LoginRepository:
public Result<LoggedInUser> login(String username, String password) {
// handle login
Result<LoggedInUser> result = dataSource.login(username, password);
if (result instanceof Result.Success) {
setLoggedInUser(((Result.Success<LoggedInUser>) result).getData());
}
return result;
}
Примечание: у меня нет доступа к серверу. Я использую Gson в качестве конвертера.
Образец активности входа, который я использовал, можно найти здесь
ОБНОВЛЕНИЕ:
Успешный вход с действительными учетными данными: