处理碎片中的Web服务调用和缓存数据

时间:2013-07-10 17:07:44

标签: android

美好的一天,抱歉相当长的帖子。这更像是一个设计决策而不是其他任何东西。我有一个包含4个片段的活动。现在我通过slideMenu切换片段。 每个Fragment都调用一个webservices,并获得一个与AsyncTask相关的JSONObject结果。我正在寻找一个结构,我必须缓存每个JSONObject结果 对于每个片段。当用户在片段之间切换时,它会检查是否有一定的时间已到期并采取相应的行动

- 如果缓存时间已过,请重新加载网络请求。   - 如果不是,请使用缓存的JSONObject结果并显示给用户。

这意味着如果我有6小时的过期时间或者后端的数据每6小时更新一次,我应该只通过asynctask从webservice请求 每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. 在我的片段中,我在onCreate()中将它们设置为true,使用它来确定是否第一次请求然后将其设置为false,这样我就不再需要了。 然后在我的片段OnResume()中,我检查cached_time是否已经过期。我做这样的事情

    @覆盖     public void onResume(){         super.onResume();         public final static long 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有一个更优雅的方式,我可以实现这一点?每一个输入都将非常感激。感谢

1 个答案:

答案 0 :(得分:0)

1.首先,您需要创建用于保存片段数据的数据结构

  1. 检查数据结构中的数据是否可用于选定的分类,是时候刷新数据了 如果是,则将加载数据(Web服务加载数据)调用为片段 其他 从数据结构加载数据并以片段形式显示。