如何在viewpager中有效地进行网络调用

时间:2017-01-08 14:31:27

标签: android android-fragments android-viewpager retrofit

我必须在每个页面中进行网络调用,这是viewpager中的一个片段。

问题是viewpager调用具有网络请求的相邻片段的onCreateView()(我正在使用改造),这使得在进行网络请求后仍然可以看到改进请求的进度对话框。

viewPager.setOffscreenPageLimit(1);

Android允许setOffScreenPageLimit中的最小值为1。

我也用过

@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
    super.setUserVisibleHint(isVisibleToUser);
    if(isVisible()){
        if(isVisibleToUser){
            Log.d("MyTag","TopFramgnet:My Fragment is visible");
        }else{
            Log.d("MyTag","TopFramgnet:My Fragment is not visible");
        }
    }
}

但每次切换到片段时都不会调用此方法。 那么,如何有效地进行网络呼叫呢?

第二个问题是如何重新加载片段,这样如果我改变了某些东西,它可以通过再次发出网络请求来重新加载它的视图?

请指导我,我找不到能解决问题的任何事情。

1 个答案:

答案 0 :(得分:0)

我认为你需要在改造中启用缓存。例如

RestAdapter.Builder builder= new RestAdapter.Builder()
   .setRequestInterceptor(new RequestInterceptor() {
        @Override
        public void intercept(RequestFacade request) {
            request.addHeader("Accept", "application/json;versions=1");
            if (MyApplicationUtils.isNetworkAvailable(context)) {
                int maxAge = 60; // read from cache for 1 minute
                request.addHeader("Cache-Control", "public, max-age=" + maxAge);
            } else {
                int maxStale = 60 * 60 * 24 * 28; // tolerate 4-weeks stale
                request.addHeader("Cache-Control", 
                    "public, only-if-cached, max-stale=" + maxStale);
            }
        }
});

Can Retrofit with OKHttp use cache data when offline

之后,如果数据相当新,则从缓存中获取数据。