簡體   English   中英

Android Json響應緩存

[英]Android Json Response Caching

我使用Volley框架從服務器獲取json響應並更新View元素,我使用Volley來處理緩存。

每當活動加載時,凌空總是從服務器獲取響應,並且它不會從緩存的響應中加載任何數據,因此我無法使用該緩存的響應來離線加載內容。

每次凌空從服務器獲取時,我都會從服務器加載我的所有圖像,這會導致響應延遲並且不會離線加載圖像。

我經歷了一些stackoverflow答案,但仍然不清楚如何找到正確的方法來緩存json響應並使用它使應用程序脫機工作,當設備連接到Internet時,它應該與服務器上的最新內容同步。

                RequestQueue queue = MySingleton.getInstance(this.getApplicationContext()).getRequestQueue();
                queue.start();
                JsonArrayRequest Req = new JsonArrayRequest(url,
                new Response.Listener<JSONArray>() {
                    @Override
                    public void onResponse(JSONArray response) {
                        Log.d(TAG, response.toString());
                        // Parsing json
                        for (int i = 0; i < response.length(); i++) {
                            try {    
                                JSONObject obj = response.getJSONObject(i);
                                MainPojo test = new MainPojo();
                                String name = obj.getString("facility_name");
                                MainPojo.oName.add(name);
                                test.setName(name);                                 
                                String imgUri = obj.getString("easyurl");                                   
                                System.out.println(imgUri);                                 
                                Integer in = getDrawable(imgUri);
                                Integer ap = R.drawable.appointments;                                   
                                System.out.println(ap);                                 
                                System.out.println(in);              

                                // adding movie to movies array
                                testList.add(test);

                                    } catch (JSONException e) {
                                e.printStackTrace();
                                    }    
                                }    
                        // notifying list adapter about data changes                          
                        mAdapter.notifyDataSetChanged();
                            }
                        }, new Response.ErrorListener() {
                            @Override
                            public void onErrorResponse(VolleyError error) {
                        VolleyLog.d(TAG, "Error: " + error.getMessage());                    

                            }
                        })
                    {            
                    //**
                    // Passing some request headers
                    //*
                    @Override
                    public Map<String, String> getHeaders() throws AuthFailureError {
                        HashMap<String, String> headers = new HashMap<String, String>();
                        headers.put("Cookie", MainActivity.sharedpreferences.getString(savedCookie, ""));                
                        headers.put("Set-Cookie", MainActivity.sharedpreferences.getString(savedCookie, ""));                                   
                        return headers;
                    } 
                };   
                // Add the request to the RequestQueue.      
                MySingleton.getInstance(this).addToRequestQueue(Req);

我在這里缺少什么來緩存json響應?

服務器管理響應中的“緩存”標頭中可以緩存的內容:“過期”或“最大年齡”

我最近開發了一個用於此場景的項目。 http://mbag102.github.io/spice

基本上,它利用GSON和Volley來進行服務器請求,並將結果緩存在SQLite DB中(使用Sugar ORM的稍加修改的版本)。 我在各種應用程序中都使用了它,事實證明它相當快速有效。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM