由于ViewPager+Fragment 预加载导致的bug之 登陆失效

背景:请求网络的时候要通过OkhttpClient的Interceptor给Request添加header。

这里面需要一个加密的token(和时间戳有关),以及时间戳,app版本等信息。

Request request = re.addHeader("token", new AESutils().getToken())
        .addHeader("gps", finalLocation)
        .addHeader("version", CommonUtils.getVersionName(mContext))
        .addHeader("os", "Product Model: " + android.os.Build.MODEL + ",Version:"
                + android.os.Build.VERSION.SDK + ","
                + android.os.Build.VERSION.RELEASE)
        .addHeader("sn", CommonUtils.getDericeId(mContext))
        .addHeader("timeMillis", App.pre.getTime())
        .build();

当用ViewPager+Fragment的时候默认加载多了。导致同时请求发生。第一个Fragment在loadData的时候在addheader设置了一个时间戳,然后第二个也走到了这里,覆盖了第一个的,第一个再走到gettime的时候拿到了不是第一个设置的。简单说就是被覆盖了。

解决办法有2个

  1. 第一就是第二和第三个Fragment分别延迟加载。用handler或者rxjava之类的做个延迟。这样保证错开。

  2. 第二种我觉得比较优雅一点的,在Fragment还没有被切换过来的时候先不加载数据,避免浪费流量。切换过来的时候再请求。

     boolean needLoad=true;
     @Override
     public void setUserVisibleHint(boolean isVisibleToUser) {
     if (isVisibleToUser&&needLoad){
         mViewModel.loadData();
         needLoad=false;
     }
     }
    

你可能感兴趣的:(由于ViewPager+Fragment 预加载导致的bug之 登陆失效)