Android 使用retrofit时,怎样获取响应的头信息

Posted 星辰

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android 使用retrofit时,怎样获取响应的头信息相关的知识,希望对你有一定的参考价值。

这个问题,我前段时间在项目中使用Retrofit遇到过,最后查到的解决办法有两种获取Response Headers的方法,第一种是直接在定义接口是让接口返回Retrofit的Response对象,在Response对象中可以获取到Headers,如:

@GET("/****act=****")
Response<SomeClass> getSomeData();

在操作Response对象时,使用response.headers();得到Headers。

这样做需要修改所有的接口,不是一个很好的办法,我在查询官方文档得到了另外一个方法,就是在构建Retrofit的APIService,在OkHttpClient中加入Interceptor,用以拦截请求和响应获取请求头和响应头。此方法可用于Retrofit2和OKHttp3.

public static OkHttpClient genericClient() {  
        OkHttpClient httpClient = new OkHttpClient.Builder()  
                .addInterceptor(new Interceptor() {  
                    @Override  
                    public Response intercept(Chain chain) throws IOException {  
                       Response response = chain.proceed(chain.request());
                        //存入Session
                        if (response.header("Set-Cookie") != null) {
                            SessionManager.setSession(response.header("Set-Cookie"));
                        }
                        //刷新API调用时间
                        SessionManager.setLastApiCallTime(System.currentTimeMillis());
                        
                        return response;
                    }  
  
                })  
                .build();  
  
        return httpClient;  
    }  

需要注意的一点是,Interceptor必须在OkHttpClient构建时加入,OKHttpClient的interceptors()方法返回的是一个不可编辑的列表,如果对其进行修改操作,会产生UnSupportedOperationException。

 

 

Retrofit retrofit = new Retrofit.Builder()...
                                .build();
UserService userService = retrofit.create(UserService.class);
Call<User> call  = userService.loadUser();
Response<User> response = call.execute();

okhttp3.Response okResponse = response.raw();
Headers headers  = okResponse.headers();

然后你就查okhttp的api好了

以上是关于Android 使用retrofit时,怎样获取响应的头信息的主要内容,如果未能解决你的问题,请参考以下文章

Android:使用 Retrofit 获取不同的对象列表数据

Retrofit--使用Retrofit时怎样去设置OKHttp

使用Retrofit2调用GET时获取Null对象作为响应

无法在 Retrofit 2.0 android 中获取 json 字符串作为响应

Android Studio - 使用 retrofit2 从 restdb 获取信息

我得到了预期的BEGIN_ARRAY,但是在使用Android中的Retrofit(java)尝试获取json时,在第1行第2列路径$中是BEGIN_OBJECT