当Android Retrofit收到UnAuthenticated响应(也称为401错误)时,可以通过以下代码示例来处理:
首先,定义一个错误处理类,例如UserAuthError.java:
public class UserAuthError extends Throwable {
public UserAuthError(String message) {
super(message);
}
}
然后,在Retrofit API接口中,添加对UnAuthenticated响应的处理,例如UserService.java:
public interface UserService {
@GET("/user/dashboard")
Call getUserDashboard();
// Add this method to handle UnAuthenticated response (401)
@GET("/user/token")
Call refreshToken();
}
接下来,在Retrofit API的实现类中,处理401响应并尝试刷新令牌(Token),例如UserServiceImpl.java:
public class UserServiceImpl implements UserService {
private UserService userService;
private String token;
public UserServiceImpl() {
// Initialize Retrofit instance with token interceptor
OkHttpClient.Builder httpClient = new OkHttpClient.Builder()
.addInterceptor(new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
Request original = chain.request();
Request.Builder requestBuilder = original.newBuilder()
.header("Authorization", "Bearer " + token)
.method(original.method(), original.body());
Request request = requestBuilder.build();
Response response = chain.proceed(request);
if (response.code() == 401) {
// Refresh token and retry request
token = refreshToken();
request = request.newBuilder()
.header("Authorization", "Bearer " + token)
.build();
response = chain.proceed(request);
}
return response;
}
});
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://api.example.com/")
.addConverterFactory(GsonConverterFactory.create())
.client(httpClient.build())
.build();
userService = retrofit.create(UserService.class);
}
@Override
public Call getUserDashboard() {
return userService.getUserDashboard();
}
@Override
public Call refreshToken() {
// Send POST request to refresh token API
// and return new token in response body