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