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
无法在 Retrofit 2.0 android 中获取 json 字符串作为响应
Android Studio - 使用 retrofit2 从 restdb 获取信息
我得到了预期的BEGIN_ARRAY,但是在使用Android中的Retrofit(java)尝试获取json时,在第1行第2列路径$中是BEGIN_OBJECT