Android-TV开发-使用OkHttp定时请求网络数据不刷新问题

  1. 1. 问题描述
  2. 2. 解决办法
  3. 3. 依赖说明

问题描述

  • 电视APP某个页面需要每隔若干秒刷新一次数据;
  • 但是,刷新一定时间后数据不更新了,电视网络没问题;
  • 并且,使用电视的清理APP缓存功能后,会刷新;
  • 而且,隔一段时间后又出现此问题了。

解决办法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
    public static KqApi getDefaultApi() {
String serverIp = KqSharedUtil.getServerIp();
if (api0 == null) {
synchronized (Api.class) {
if (api0 == null) {
File cache = KqApplication.getINSTANCE().getCacheDir();
/* HttpLoggingInterceptor logging = new HttpLoggingInterceptor();
logging.setLevel(HttpLoggingInterceptor.Level.BASIC);
HttpLoggingInterceptor logging1 = new HttpLoggingInterceptor();
logging1.setLevel(HttpLoggingInterceptor.Level.BODY);*/
OkHttpClient client = new OkHttpClient.Builder()
.cache(new Cache(cache, 1024))
.readTimeout(20, TimeUnit.SECONDS)
.writeTimeout(20, TimeUnit.SECONDS)
.connectTimeout(10, TimeUnit.SECONDS)
//!!!关键代码,强制不使用缓存
.addNetworkInterceptor(new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request().newBuilder()
.cacheControl(new CacheControl.Builder().noCache().build())
.build();
return chain.proceed(request);
}
})
// .addInterceptor(logging)
// .addInterceptor(logging1)
.build();
Retrofit retrofit = new Retrofit.Builder()
.client(client)
.addConverterFactory(GsonConverterFactory.create())//添加 json 转换器
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())//添加 RxJava 适配器
.baseUrl(serverIp)
.build();
api0 = retrofit.create(KqApi.class);
}
}
}
return api0;
}

依赖说明

1
2
3
4
5
6
7
8
9
10
11
12
//retrofit
compile 'com.squareup.retrofit2:retrofit:2.1.0'
//gson
compile 'com.squareup.retrofit2:converter-gson:2.1.0'
//rxjava
compile 'io.reactivex:rxjava:1.1.9'
compile 'io.reactivex:rxandroid:1.2.1'
compile 'com.squareup.retrofit2:adapter-rxjava:2.1.0'
//okhttp
compile 'com.squareup.okhttp3:okhttp:3.4.1'
compile 'com.squareup.okhttp3:okhttp-urlconnection:3.4.1'
compile 'com.squareup.okhttp3:logging-interceptor:3.4.1'