如何防止 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
}