如何存储缓存数据?

时间:2017-02-24 18:33:09

标签: android database

在我的Android应用程序中,我试图将以我的数据库浏览的数据以缓存数据的形式存储到本地电话(完整数据库的某些数据可以在离线模式下显示,或者当电话连接到互联网时)。我不知道怎么做。如果可能的话,请添加教程链接 谢谢!

1 个答案:

答案 0 :(得分:0)

更新-1

API调用通常会获得JSON响应,并且可以使用下面提供的代码自动缓存。无论你有什么样的响应都没关系。下面的代码只是重写响应头,以便获取信息即使手机未连接到互联网,也会自动从缓存中

更新-2

您可以查看此url

如果您正在进行API调用,则可以使用Okayhttp拦截器缓存响应。您甚至可能不需要将数据存储在数据库中,您的整个响应可以缓存在缓存目录中。如果您使用的是OkHttp客户端,则可以添加此拦截器。

private static Cache provideCache() {
    Cache cache = null;
    try {
        cache = new Cache(new File(context.getCacheDir(), "http-cache"),
                10 * 1024 * 1024); // 10 MB
    } catch (Exception e) {
    }
    return cache;
}

public static Interceptor provideCacheInterceptor() {
    return new Interceptor() {
        @Override
        public Response intercept(Chain chain) throws IOException {
            Response response = chain.proceed(chain.request());

            // re-write response header to force use of cache
            CacheControl cacheControl = new CacheControl.Builder()
                    .maxAge(60, TimeUnit.MINUTES)
                    .build();

            return response.newBuilder()
                    .header(CACHE_CONTROL, cacheControl.toString())
                    .build();
        }
    };
}

public static Interceptor provideOfflineCacheInterceptor() {
    return new Interceptor() {
        @Override
        public Response intercept(Chain chain) throws IOException {
            Request request = chain.request();

            if (!AndroidUtils.isNetworkAvailable()) {
                CacheControl cacheControl = new CacheControl.Builder()
                        .maxStale(7, TimeUnit.DAYS)
                        .build();

                request = request.newBuilder()
                        .cacheControl(cacheControl)
                        .build();
            }

            return chain.proceed(request);
        }
    };
}


OkHttpClient okHttpClient=new OkHttpClient.Builder()
            .addInterceptor(provideOfflineCacheInterceptor())
            .addNetworkInterceptor(provideCacheInterceptor())
            .cache(provideCache())
            .build()