編輯:關於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) { }中增加相應語句即可,這裡不做展開。
其實這是比較笨的辦法,按道理應該是向服務器請求,看是否有數據更新,有則更新數據(即服務器決定緩存是否可用)但是暫時不知道怎麼完成,等以後再改吧。
Android 滑動導航菜單的快速構建(一)
滑動導航菜單一直都是移動App中比較流行的UI設計,隨著Material Design的盛行Android也越來越多采用這種設計,當然這種滑動菜單樣式也是各種各樣五花八門
android中彈出輸入法,內容上移的問題
前言:有一天在寫代碼的時候,我想達到如下效果: AndroidManifest中的windowSoftInputMode屬性,我將其設置為adjustResize,正常來
android防止反編譯系列:如何對抗JD-GUI
又到周末一個人侘在家裡無事可干,這就是程序員的悲哀啊。好了我們利用周末的時間繼續介紹android apk防止反編譯技術的另一種方法。一、對抗JD-GUI原理通常在對ap
android系統cpu資源相關查詢
android系統cpu資源相關查詢 我們都知道android是基於linux系統內核的,在linux系統中我們查看系統資源消耗情況,一個可以直接通過命令行的