改造 2 OkHttpClient 缓存不起作用

雅各布·塞莱斯廷

所以这就是问题所在,我正在尝试为我的应用程序实现缓存,我按照本教程Android: Cache network requests for offline access with Retrofit2 和 OkHTTP3来做到这一点。可悲的是,当没有互联网连接时,缓存的响应不会显示,而是

Toast.makeText(getContext(), getContext().getResources().getString(R.string.error_failed_to_load_posts), Toast.LENGTH_SHORT).show();

被执行。那么谁能告诉我我做错了什么?或者指导我得到这个问题的答案?如果您问我,我会在需要时发布其他信息。下面是具体函数的完整代码。

private void loadHomeLoggedPosts(String uid) {
    progressBar.setVisibility(View.VISIBLE);

    OkHttpClient client = new OkHttpClient
            .Builder()
            .cache(new Cache(getContext().getCacheDir(), 10 * 1024 * 1024)) // 10 MB
            .addInterceptor(new Interceptor() {
                @Override public okhttp3.Response intercept(Chain chain) throws IOException {
                    Request request = chain.request();
                    if (Utils.isNetworkAvailable(getContext())) {
                        request = request.newBuilder().header("Cache-Control", "public, max-age=" + 60).build();
                    } else {
                        request = request.newBuilder().header("Cache-Control", "public, only-if-cached, max-stale=" + 60 * 60 * 24 * 7).build();
                    }
                    return chain.proceed(request);
                }
            })
            .build();

    Gson gson = new GsonBuilder()
            .setLenient()
            .create();

    Retrofit retrofit = new Retrofit.Builder()
            .baseUrl(getResources().getString(R.string.app_base_url))
            .client(client)
            .addConverterFactory(GsonConverterFactory.create(gson))
            .build();

    RequestInterface request = retrofit.create(RequestInterface.class);
    Call<Classes> call = request.homeLoggedPosts(uid);
    call.enqueue(new Callback<Classes>() {
        @Override
        public void onResponse(Call<Classes> call, Response<Classes> response) {
            Classes jsonResponse = response.body();
            if (jsonResponse!=null) {
                homePosts = jsonResponse.getHomePosts();
                homeLoggedInAdapter = new HomeLoggedInAdapter(homePosts);
                recyclerView.setAdapter(homeLoggedInAdapter);
                homeLoggedInAdapter.notifyDataSetChanged();
            }
            else {
                Toast.makeText(getContext(), getContext().getResources().getString(R.string.error_failed_to_load_posts), Toast.LENGTH_SHORT).show();
            }
            progressBar.setVisibility(View.INVISIBLE);
        }

        @Override
        public void onFailure(Call<Classes> call, Throwable t) {
            progressBar.setVisibility(View.INVISIBLE);
            Toast.makeText(getContext(), getContext().getResources().getString(R.string.error_failed_to_load_posts), Toast.LENGTH_SHORT).show();
            Log.d("ERROR", t.getMessage());
        }
    });
}

编辑:我在同一个片段调用中有两个函数,如下所示:

if (FirebaseAuth.getInstance().getCurrentUser()!=null) {
        loadHomeLoggedPosts(FirebaseAuth.getInstance().getCurrentUser().getUid());
    }
    else {
        loadHomeNotLoggedPosts();
    }

我已经在上面发布了 loadHomeLoggedPosts 的代码。loadHomeNotLoggedPosts 相同,不同之处仅在于此部分:

RequestInterface request = retrofit.create(RequestInterface.class);
Call<Classes> call = request.homeNotLoggedPosts();

Farmaan Elahis 的回答适用于 loadHomeNotLoggedPosts ,但不适用于 loadHomeLoggedPosts。任何帮助都受到高度赞赏。谢谢!

Okhttp 日志:由于日志太大,无法在此处完整发布,因此我已删除了一些部分。

拳头启动:

08-27 18:35:29.426 32673-32673/com.appsoflife.microstories I/System.out: Cache CREATED!
08-27 18:35:29.452 32673-2498/com.appsoflife.microstories D/OkHttp: --> POST http://my_web_site.com/jacob/micro_stories/queries/home_logged.php http/1.1
08-27 18:35:29.452 32673-2498/com.appsoflife.microstories D/OkHttp: Content-Type: application/x-www-form-urlencoded
08-27 18:35:29.452 32673-2498/com.appsoflife.microstories D/OkHttp: Content-Length: 32
08-27 18:35:29.452 32673-2498/com.appsoflife.microstories D/OkHttp: uid=MY_USER_ID
08-27 18:35:29.452 32673-2498/com.appsoflife.microstories D/OkHttp: --> END POST (32-byte body)
08-27 18:35:29.460 32673-2363/com.appsoflife.microstories D/AppTracker: App Event: start
08-27 18:35:29.502 32673-32673/com.appsoflife.microstories E/RecyclerView: No adapter attached; skipping layout
08-27 18:35:29.592 32673-32679/com.appsoflife.microstories I/art: Do partial code cache collection, code=27KB, data=30KB
08-27 18:35:29.593 32673-32679/com.appsoflife.microstories I/art: After code cache collection, code=26KB, data=29KB
08-27 18:35:29.593 32673-32679/com.appsoflife.microstories I/art: Increasing code cache capacity to 128KB
08-27 18:35:29.614 32673-32673/com.appsoflife.microstories W/PropertyValuesHolder: Method set() with type float not found on target class class me.zhanghai.android.materialprogressbar.IndeterminateHorizontalProgressDrawable$RectTransformX
08-27 18:35:33.088 32673-2498/com.appsoflife.microstories D/OkHttp: <-- 200 OK http://my_web_site.com/jacob/micro_stories/queries/home_logged.php (3634ms)
08-27 18:35:33.088 32673-2498/com.appsoflife.microstories D/OkHttp: Date: Sun, 27 Aug 2017 13:05:29 GMT
08-27 18:35:33.088 32673-2498/com.appsoflife.microstories D/OkHttp: Server: Apache/2.4.25
08-27 18:35:33.088 32673-2498/com.appsoflife.microstories D/OkHttp: X-Powered-By: PHP/5.6.30
08-27 18:35:33.088 32673-2498/com.appsoflife.microstories D/OkHttp: Vary: Accept-Encoding,User-Agent
08-27 18:35:33.088 32673-2498/com.appsoflife.microstories D/OkHttp: Keep-Alive: timeout=5
08-27 18:35:33.088 32673-2498/com.appsoflife.microstories D/OkHttp: Connection: Keep-Alive
08-27 18:35:33.088 32673-2498/com.appsoflife.microstories D/OkHttp: Transfer-Encoding: chunked
08-27 18:35:33.088 32673-2498/com.appsoflife.microstories D/OkHttp: Content-Type: text/html; charset=UTF-8
08-27 18:35:33.088 32673-2498/com.appsoflife.microstories D/OkHttp: Cache-Control: max-age=120
08-27 18:35:37.890 32673-2653/com.appsoflife.microstories I/FirebaseCrash: Sending crashes
08-27 18:35:41.664 32673-32695/com.appsoflife.microstories W/art: Suspending all threads took: 9.530ms
08-27 18:35:41.681 32673-2498/com.appsoflife.microstories D/OkHttp: 

MY_JSON_OUTPUT_TOO_LONG_TO_POST

08-27 18:35:41.721 32673-2498/com.appsoflife.microstories D/OkHttp: <-- END HTTP (3297402-byte body)

第二次:

08-27 18:37:35.904 5089-5089/com.appsoflife.microstories I/System.out: Cache CREATED!
08-27 18:37:35.922 5089-5190/com.appsoflife.microstories D/OkHttp: --> POST http://my_web_site.com/jacob/micro_stories/queries/home_logged.php http/1.1
08-27 18:37:35.922 5089-5190/com.appsoflife.microstories D/OkHttp: Content-Type: application/x-www-form-urlencoded
08-27 18:37:35.922 5089-5190/com.appsoflife.microstories D/OkHttp: Content-Length: 32
08-27 18:37:35.922 5089-5190/com.appsoflife.microstories D/OkHttp: uid=MY_USER_ID
08-27 18:37:35.922 5089-5190/com.appsoflife.microstories D/OkHttp: --> END POST (32-byte body)
08-27 18:37:35.934 5089-5135/com.appsoflife.microstories D/AppTracker: App Event: start
08-27 18:37:35.979 5089-5089/com.appsoflife.microstories E/RecyclerView: No adapter attached; skipping layout
08-27 18:37:36.058 5089-5094/com.appsoflife.microstories I/art: Do partial code cache collection, code=26KB, data=30KB
08-27 18:37:36.058 5089-5094/com.appsoflife.microstories I/art: After code cache collection, code=25KB, data=29KB
08-27 18:37:36.058 5089-5094/com.appsoflife.microstories I/art: Increasing code cache capacity to 128KB
08-27 18:37:36.083 5089-5089/com.appsoflife.microstories W/PropertyValuesHolder: Method set() with type float not found on target class class me.zhanghai.android.materialprogressbar.IndeterminateHorizontalProgressDrawable$RectTransformX
08-27 18:37:39.860 5089-5190/com.appsoflife.microstories D/OkHttp: <-- 200 OK http://my_web_site.com/jacob/micro_stories/queries/home_logged.php (3937ms)
08-27 18:37:39.860 5089-5190/com.appsoflife.microstories D/OkHttp: Date: Sun, 27 Aug 2017 13:07:36 GMT
08-27 18:37:39.860 5089-5190/com.appsoflife.microstories D/OkHttp: Server: Apache/2.4.25
08-27 18:37:39.860 5089-5190/com.appsoflife.microstories D/OkHttp: X-Powered-By: PHP/5.6.30
08-27 18:37:39.860 5089-5190/com.appsoflife.microstories D/OkHttp: Vary: Accept-Encoding,User-Agent
08-27 18:37:39.860 5089-5190/com.appsoflife.microstories D/OkHttp: Keep-Alive: timeout=5
08-27 18:37:39.860 5089-5190/com.appsoflife.microstories D/OkHttp: Connection: Keep-Alive
08-27 18:37:39.860 5089-5190/com.appsoflife.microstories D/OkHttp: Transfer-Encoding: chunked
08-27 18:37:39.860 5089-5190/com.appsoflife.microstories D/OkHttp: Content-Type: text/html; charset=UTF-8
08-27 18:37:39.860 5089-5190/com.appsoflife.microstories D/OkHttp: Cache-Control: max-age=120
08-27 18:37:49.883 5089-5426/com.appsoflife.microstories I/FirebaseCrash: Sending crashes
08-27 18:37:51.044 5089-5190/com.appsoflife.microstories D/OkHttp: 

JSON_OUTPUT_TOO_LONG_TO_POST

read: unexpected EOF!
阿比纳夫·帕瓦尔

POST 调用不会在 Retrofit 中缓存。它在文档中

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

OkHttp +改造脱机缓存不起作用

来自分类Dev

OkHttp +改造脱机缓存不起作用

来自分类Dev

脱机缓存okhttp +改造不起作用

来自分类Dev

改造+ OkHTTP-响应缓存不起作用

来自分类Dev

OkHttpClient.Builder Interceptor被添加到改造2,即使条件为假

来自分类Dev

改造和okhttpclient拦截401响应

来自分类Dev

改造(1-2)中的动态标头不起作用

来自分类Dev

改造后续调用不起作用

来自分类Dev

从改造2.6.2更新到改造2.9.0后,OkHttpClient.Builder()中的java.lang.NoSuchMethodError

来自分类Dev

改造2.0.1添加cookie标头不起作用

来自分类Dev

改造ETAG和缓存

来自分类Dev

改造缓存 404 响应

来自分类Dev

改造2错误:NetworkOnMainThreadException

来自分类Dev

改造2 addQueryParam替换

来自分类Dev

改造 2 调用覆盖

来自分类Dev

改造2无法解析主机

来自分类Dev

改造2 + Rxjava处理错误

来自分类Dev

改造2没有回应

来自分类Dev

改造 2 - 发送 REQUEST 表示

来自分类Dev

改造 2 类文件问题

来自分类Dev

如何调用嵌套的改造服务并正确检索数据?[改造2]

来自分类Dev

minifyEnabled是true,shrinkResources是发布版本改造API中的true,不起作用

来自分类Dev

改造2入队方法运行2次

来自分类Dev

通过邮递员访问服务时,缓存调解器不起作用-WSO2-MI

来自分类Dev

如果缓存为空 NPE 则进行改造

来自分类常见问题

改造2-URL查询参数

来自分类常见问题

改造2:从响应正文获取JSON

来自分类Dev

无法解析改造2中的错误

来自分类Dev

改造2 @FieldMap始终为空