編輯:關於Android編程
經過學習,我們知道Volley的架構如下:
從架構上我們可以看到,volley有設置緩存機制,當找不到數據緩存或數據緩存過期時,才會聯網獲取新的數據。Volley 本身有緩存機制,不僅僅默認緩存圖片,也有緩存Json數據。通過手機文件管理軟件,我們發現Volley緩存地址:/data/data/軟件包/cache/volley 目錄下。
那麼,在聯網獲取了數據緩存後,如何獲取到Volley緩存中的數據呢?在百度上找了一整天的資料都沒有說明如何獲取到最新的數據。最後還是再stack overflow中找到了相關的資料。
RequestQueue類中有一個子函數getCache()可以返回Cache實例,通過調用改實例中的get(url)函數可以查看手機磁盤中是否保存有緩存數據,其成員變量data保存著緩存的數據內容。即:queue.getCache().get(url).data
所以,我們可以通過以下語句,來選擇獲取緩存數據或者向服務器獲取最新數據。
if(queue.getCache().get(url)!=null){ //response exists String cachedResponse = new String(queue.getCache().get(url).data); }else{ //no response queue.add(stringRequest); }
其實這樣做還是有缺陷的,那就是如果服務器更新了數據的話,則我們客戶端沒辦法獲取最新數據,而是從緩存中調取緩存數據。
為此,我一個比較笨的方法是:判斷網絡是否可用,如果可用則更新數據,當網絡不可用時,采用緩存數據。
Context context = getActivity().getApplicationContext(); if(!isNetworkAvailable(context)){ getFromDiskCache(url); //如果沒網,則調取緩存數據 }else{ //有網則從網上更新數據 //……(省略) }其中isNetworkAvailable()函數用於判斷網絡是否可用:
public static boolean isNetworkAvailable(Context context) { try { ConnectivityManager manger = (ConnectivityManager) context .getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo info = manger.getActiveNetworkInfo(); //return (info!=null && info.isConnected()); if(info != null){ return info.isConnected(); }else{ return false; } } catch (Exception e) { return false; } }
private void getFromDiskCache(String url) { if(mQueue.getCache().get(url)!=null){ try { String str = new String((mQueue.getCache().get(url).data); JSONArray response = new JSONArray(str); //……(省略操作) } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } }else{ Log.d(TAG, 沒有緩存數據); } }其實,在服務器沒響應時,我們也可以調用getFromDiskCache()函數來調取緩存數據的,在public void onErrorResponse(VolleyError error) { }中增加相應語句即可,這裡不做展開。
其實這是比較笨的辦法,按道理應該是向服務器請求,看是否有數據更新,有則更新數據(即服務器決定緩存是否可用)但是暫時不知道怎麼完成,等以後再改吧。
滑動導航菜單一直都是移動App中比較流行的UI設計,隨著Material Design的盛行Android也越來越多采用這種設計,當然這種滑動菜單樣式也是各種各樣五花八門
前言:有一天在寫代碼的時候,我想達到如下效果: AndroidManifest中的windowSoftInputMode屬性,我將其設置為adjustResize,正常來
又到周末一個人侘在家裡無事可干,這就是程序員的悲哀啊。好了我們利用周末的時間繼續介紹android apk防止反編譯技術的另一種方法。一、對抗JD-GUI原理通常在對ap
android系統cpu資源相關查詢 我們都知道android是基於linux系統內核的,在linux系統中我們查看系統資源消耗情況,一個可以直接通過命令行的