我從波紋管庫在我的項目爲連接到服務器上,然後我得到的從服務價值的列表使用,我充滿了他們我的微調:改造+ RxJava不能緩存響應 - Android電子
compile 'com.squareup.okhttp3:okhttp:3.6.0'
compile 'com.squareup.retrofit2:retrofit:2.1.0'
compile 'com.jakewharton.retrofit:retrofit2-rxjava2-adapter:1.0.0'
問題:如何緩存我的適配器列表48小時,或者我每48小時更新一次我的微調列表服務。
貝婁是我RetrofitApi class
,但呼叫服務當我打開應用程序,我不能緩存48時:
public class RetrofitApi {
private static PublicApi retrofit = null;
public static PublicApi getClient(String url) {
OkHttpClient okHttpClient;
try {
// Create a trust manager that does not validate certificate chains
final TrustManager[] trustAllCerts = new TrustManager[]{
new X509TrustManager() {
@Override
public void checkClientTrusted(java.security.cert.X509Certificate[] chain, String authType) throws CertificateException {
}
@Override
public void checkServerTrusted(java.security.cert.X509Certificate[] chain, String authType) throws CertificateException {
}
@Override
public java.security.cert.X509Certificate[] getAcceptedIssuers() {
return new java.security.cert.X509Certificate[]{};
}
}
};
// Install the all-trusting trust manager
final SSLContext sslContext = SSLContext.getInstance("SSL");
sslContext.init(null, trustAllCerts, new java.security.SecureRandom());
// Create an ssl socket factory with our all-trusting manager
final SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory();
OkHttpClient.Builder builder = new OkHttpClient.Builder();
builder.sslSocketFactory(sslSocketFactory, (X509TrustManager) trustAllCerts[0]);
builder.hostnameVerifier(new HostnameVerifier() {
@Override
public boolean verify(String hostname, SSLSession session) {
return true;
}
});
okHttpClient = new OkHttpClient.Builder().addInterceptor(new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
request = new Request.Builder()
.cacheControl(new CacheControl.Builder()
.maxAge(2, TimeUnit.DAYS)
.minFresh(48, TimeUnit.HOURS)
.maxStale(48, TimeUnit.HOURS)
.build())
.url(request.url())
.build();
return chain.proceed(request);
}
}).build();
} catch (Exception e) {
throw new RuntimeException(e);
}
retrofit = new Retrofit.Builder()
.baseUrl(url)
.client(okHttpClient)
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.addConverterFactory(GsonConverterFactory.create())
.build().create(PublicApi.class);
return retrofit;
}
}
然後我連接到我的服務像波紋管:
PublicApi publicApi = retrofitApi.getClient("https://xxx.xxx.xxx", context);
mCompositeDisposable.add(publicApi.language("getLanguages")
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io())
.subscribe(language -> responseLanguage(language, resultListener), language -> errorLanguage(language, resultListener)));
你的意思是,以更新的應用程序只針對列表當用戶打開它?或者是否需要在48小時週期後顯示任何通知? – George
你的意思是隻在用戶打開它時才更新應用中的列表?是 –