如何防止 Java RetroFit 在出现 401 未经授权错误时使我的应用程序崩溃?
How do I prevent Java RetroFit from crashing my app on a 401 Unauthorized error?
每当应用程序出现 401 错误时,我的应用程序就会崩溃。我创建了一个自定义错误处理程序,但我不确定如何让应用程序使用此错误处理程序,以便应用程序正常停止,而不会闪烁用户 "Unforunately, Application has stopped."
这是我的代码:
... new RestAdapter.Builder()...setErrorHandler(getErrorHandler()).build();
public ErrorHandler getErrorHandler() {
return new ErrorHandler() {
@Override
public Throwable handleError(RetrofitError cause) {
Response r = cause.getResponse();
if (r != null && r.getStatus() == 401) {
Log.e(TAG, "user not authorized:" + cause.toString());
} else {
Log.e(TAG, "regular exception thrown for CloudManager");
}
return cause;
}
};
正如您可以使用 javadoc 检查的那样,当您想要将 RetrofitError
包装到 CustomError
异常时使用 ErrorHandler。它不会为您捕获异常。
class MyErrorHandler implements ErrorHandler {
@Override public Throwable handleError(RetrofitError cause) {
Response r = cause.getResponse();
if (r != null && r.getStatus() == 401) {
return new UnauthorizedException(cause);
}
return cause;
}
}
要防止应用程序崩溃,您必须及早发现错误。
@GET("/users/{user}/repos")
List<Repo> listRepos(@Path("user") String user);
try {
List<Repo> repos = retrofit.listRepos("octocat");
} catch (RetrofitError error) {
// TODO: handle error
}
每当应用程序出现 401 错误时,我的应用程序就会崩溃。我创建了一个自定义错误处理程序,但我不确定如何让应用程序使用此错误处理程序,以便应用程序正常停止,而不会闪烁用户 "Unforunately, Application has stopped."
这是我的代码:
... new RestAdapter.Builder()...setErrorHandler(getErrorHandler()).build();
public ErrorHandler getErrorHandler() {
return new ErrorHandler() {
@Override
public Throwable handleError(RetrofitError cause) {
Response r = cause.getResponse();
if (r != null && r.getStatus() == 401) {
Log.e(TAG, "user not authorized:" + cause.toString());
} else {
Log.e(TAG, "regular exception thrown for CloudManager");
}
return cause;
}
};
正如您可以使用 javadoc 检查的那样,当您想要将 RetrofitError
包装到 CustomError
异常时使用 ErrorHandler。它不会为您捕获异常。
class MyErrorHandler implements ErrorHandler {
@Override public Throwable handleError(RetrofitError cause) {
Response r = cause.getResponse();
if (r != null && r.getStatus() == 401) {
return new UnauthorizedException(cause);
}
return cause;
}
}
要防止应用程序崩溃,您必须及早发现错误。
@GET("/users/{user}/repos")
List<Repo> listRepos(@Path("user") String user);
try {
List<Repo> repos = retrofit.listRepos("octocat");
} catch (RetrofitError error) {
// TODO: handle error
}