Android Retrofit token校验过期重新返回登陆也实现方法
1. 整体流程
为了实现Android Retrofit token校验过期重新返回登陆页的功能,我们需要进行以下步骤:
步骤 | 描述 |
---|---|
1. | 发起网络请求 |
2. | 拦截请求结果 |
3. | 根据返回结果判断token是否过期 |
4. | 如果token过期,跳转到登陆页面 |
5. | 登陆成功后重新发起之前的请求 |
下面我们将逐步讲解每个步骤需要做的事情。
2. 发起网络请求
首先,我们需要使用Retrofit库来发起网络请求。假设我们已经完成了Retrofit的基本配置和接口定义,我们可以使用以下代码来发送请求:
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("
.addConverterFactory(GsonConverterFactory.create())
.build();
ApiService apiService = retrofit.create(ApiService.class);
Call<ApiResponse> call = apiService.getData();
call.enqueue(new Callback<ApiResponse>() {
@Override
public void onResponse(Call<ApiResponse> call, Response<ApiResponse> response) {
if (response.isSuccessful()) {
// 请求成功,处理返回结果
} else {
// 请求失败,处理错误信息
}
}
@Override
public void onFailure(Call<ApiResponse> call, Throwable t) {
// 请求失败,处理异常信息
}
});
这段代码中,我们使用了Retrofit.Builder
来配置Retrofit,并创建了一个ApiService
实例来定义我们的接口。然后,我们可以通过apiService
来发起网络请求,并使用call.enqueue
方法来异步执行请求。
3. 拦截请求结果
为了判断token是否过期,我们需要在请求结果返回前对其进行拦截。我们可以使用OkHttp的拦截器来实现这个功能。首先,我们需要创建一个自定义的拦截器类,如下所示:
public class TokenInterceptor implements Interceptor {
@Override
public Response intercept(Chain chain) throws IOException {
Request originalRequest = chain.request();
// 在这里可以对请求进行预处理,比如添加token等
Response response = chain.proceed(originalRequest);
// 在这里可以对返回结果进行处理,比如判断token是否过期
return response;
}
}
在这个拦截器中,我们可以通过chain.request()
获取到原始的请求对象,可以在请求前对其进行处理。然后,通过chain.proceed(originalRequest)
方法来执行原始的请求,并获取到返回结果。
接下来,我们需要将这个自定义的拦截器添加到OkHttp的客户端中。在创建OkHttpClient时,添加以下代码:
OkHttpClient client = new OkHttpClient.Builder()
.addInterceptor(new TokenInterceptor())
.build();
这样一来,我们就可以在请求发送和响应返回的过程中对其进行拦截和处理。
4. 根据返回结果判断token是否过期
在拦截器的intercept
方法中,我们可以获取到返回结果对象response
。我们可以通过该对象获取到返回的状态码、响应头等信息,来判断token是否过期。
public class TokenInterceptor implements Interceptor {
@Override
public Response intercept(Chain chain) throws IOException {
Request originalRequest = chain.request();
Response response = chain.proceed(originalRequest);
if (response.code() == 401) {
// token过期,跳转到登陆页面
}
return response;
}
}
在上面的代码中,我们判断了返回的状态码是否为401,如果是,则表示token过期,我们可以在这里跳转到登陆页面。
5. 跳转到登陆页面
当我们判断到token过期后,我们需要跳转到登陆页面让用户重新登陆。在Android中,我们可以通过Intent
来实现页面之间的跳转。
public class TokenInterceptor implements Interceptor {
@Override
public Response intercept(Chain chain) throws IOException {
Request originalRequest = chain.request();
Response response = chain.proceed(originalRequest);
if (response.code() == 401) {
Context context = MyApplication.getInstance().getApplicationContext();
Intent intent = new Intent(context, LoginActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity