Android 在片段中处理Web服务调用和缓存数据

Android 在片段中处理Web服务调用和缓存数据,android,Android,你好,很抱歉发了这么长的帖子。这更像是一个设计决策,而不是其他任何事情。我有一个包含4个片段的活动。现在我通过幻灯片切换片段。 每个片段调用一个webservices,并获得一个针对AsyncTask的JSONObject结果。我正在寻找一个必须缓存每个JSONObject结果的结构 对于每个片段。当用户在片段之间切换时,它会检查一定的时间是否已过期,并相应地采取行动 -如果缓存时间已过期,请重新加载网络请求。 -如果不是,则使用缓存的JSONObject结果并向用户显示 这意味着如果我有一个6

你好,很抱歉发了这么长的帖子。这更像是一个设计决策,而不是其他任何事情。我有一个包含4个片段的活动。现在我通过幻灯片切换片段。 每个片段调用一个webservices,并获得一个针对AsyncTask的JSONObject结果。我正在寻找一个必须缓存每个JSONObject结果的结构 对于每个片段。当用户在片段之间切换时,它会检查一定的时间是否已过期,并相应地采取行动

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

这意味着如果我有一个6小时的到期时间,或者更确切地说,来自后端的数据每6小时更新一次,那么我应该只通过asynctask从webservice请求 每6小时一次,其他时间只使用缓存值

我当前的实现 1.通过扩展应用程序类,第一次为每个片段加载一组全局布尔变量

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;
    }
}
  • 在我的片段中,我在onCreate()中将它们设置为true,使用它来确定是否第一次请求,然后将其设置为false,这样我就不必再这样做了。 然后在我的fragments OnResume()中检查缓存的时间是否已过期。我是这样做的

    @凌驾 恢复时公开作废(){ super.onResume(); 公共最终静态长分钟=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);
        }
    
      }
    }
    
    在我看来,这是一种处理这种情况的混乱方式。考虑到应用程序崩溃和活动生命周期,这是一种很好的解决方案吗?或者有一种更优雅的方法可以实现这一点吗?我们将非常感谢您的每一点意见。谢谢


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

  • 签入数据结构,确保数据可用于所选的fragement,并且是刷新数据的时候了 如果是,则将加载数据(加载数据的web服务)调用到片段中 其他的 从数据结构加载数据并以片段形式显示