【发布时间】:2018-01-07 18:43:40
【问题描述】:
我在 Android 应用程序中使用 Retrofit。当我使用令牌访问 API 以获取用户信息时,它会提供缓存(先前)响应。每当我注销并再次登录时,API 都会提供以前的用户详细信息,我在 Postman 中测试了 API,它在那里工作正常。
我尝试了一些我搜索的解决方案,但没有任何效果。
我得到的响应标头是
传输编码:分块 内容类型:应用程序/json;字符集=utf-8 服务器:红隼 日期:2018 年 1 月 8 日星期一 09:35:26 GMT
下面是ApiClient类
public class ApiClient {
public static final String BASE_URL = "http://XX.XXX.XXX.XX/api/";
private static Retrofit authRetrofit = null;
private static Retrofit retrofit = null;
public static Retrofit getClient() {
if (retrofit == null) {
retrofit = new Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(ScalarsConverterFactory.create())
.build();
}
return retrofit;
}
public static Retrofit getAuthorizeClient(final String token) {
OkHttpClient.Builder httpClient = new OkHttpClient.Builder();
httpClient.addInterceptor(new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
Request original = chain.request();
Request request = original.newBuilder()
.addHeader("Authorization", "Bearer " + token)
.addHeader("Cache-control", "no-cache")
.method(original.method(), original.body())
//.cacheControl(CacheControl.FORCE_NETWORK)
.build();
return chain.proceed(request);
}
});
OkHttpClient client = httpClient.cache(null).build();
if (authRetrofit == null) {
authRetrofit = new Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(ScalarsConverterFactory.create())
.client(client).build();
}
return authRetrofit;
}
}
【问题讨论】:
-
API 的响应是什么,包括 (http) 标头?通常改造会尊重来自 http 标头的缓存信息。
-
我的响应是它提供了 JSON 对象,该对象具有两个字段用户名和电子邮件,但它是以前登录的用户的详细信息
-
还有 http 标头?
-
抱歉回复晚了。我在响应标头
Transfer-Encoding: chunked Content-Type: application/json; charset=utf-8 Server: Kestrel Date: Mon, 08 Jan 2018 09:35:26 GMT中得到了这个 -
所以API没有发送缓存控制头?