2013-07-10 95 views
0

美好的一天,對於相當長的文章感到抱歉。這更像是一個設計決定而非其他任何事情。我有一個包含4個片段的活動。現在我通過slideMenu切換片段。 每個片段調用一個webservices並獲取一個AsyncTask的JSONObject結果。我正在尋找一種結構,我必須緩存每個片段的每個JSONObject結果 。當用戶在片段之間切換時,它檢查一段時間是否已經過期並且相應地起作用在碎片中處理web服務調用和緩存數據

如果緩存的時間已經過期,則再次重新加載網絡請求。 如果不是,請使用緩存的JSONObject結果並顯示給用戶。

這意味着,如果我有一個到期時間等6個小時或者更確切地說,數據從後端更新每隔6小時,我應該從web服務通過的AsyncTask 每6小時一次等次剛使用高速緩存的值只請求代替。

我目前的實現 1.通過擴展Application類來爲每個片段第一次加載一組全局布爾變量。

public class MyApp extends Application { 

private boolean First_load_frag1 = true; 
private boolean First_load_frag2= true; 



    public void setLoadFrag1(boolean value){ 
     First_load_frag1 = value; 
    } 

    public boolean getLoadFrag1(){ 
     return First_load_frag1; 
    } 
} 
  1. 在我的片段,我將它們設置爲true的onCreate(),用它來確定是否請求第一次,然後將其設置爲false,這樣我就不必了。 然後在我的片段OnResume()我檢查看是否cached_time已過期或沒有。我做這樣的事情

    @Override public void onResume(){ super.onResume(); public final static MINUTE_MILLIS = 60000;

    Calendar cal = Calendar.getInstance(); 
    
        int mins = (int) ((cal.getTimeInMillis()/MINUTE_MILLIS) - (cached_timer/MINUTE_MILLIS); 
    
        if(mins > 180){ 
         Toast.makeText(getActivity(), "on resume refresh data", Toast.LENGTH_LONG).show(); 
         requestService(); //this sends a request to the webservice 
    
        } else { 
    
    
        cached_result = manager.getCachedJSONResult(CACHED_RESULT); 
    
    
        if(cached_result != null){ 
          Toast.makeText(getActivity(), "on resume cached data", Toast.LENGTH_LONG).show(); 
          loadCachedResult(cached_result); 
        } 
    
        } 
    } 
    

    這感覺就像處理這種情況給我的一種凌亂的方式。考慮到應用程序崩潰和活動生命週期,這是做這樣的oris的一個很好的解決方案那裏有一個更優雅的方式,我可以做到這一點?每一個輸入將非常感激。由於

回答

0

1.首先你需要保存數據的片段數據結構

  1. 檢查數據可供選擇fragement創建數據結構,如果是,那麼是時候更新數據 調用加載數據(web服務加載數據)爲片段 else 加載數據結構中的數據並顯示在片段中。