背景:请求网络的时候要通过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个
第一就是第二和第三个Fragment分别延迟加载。用handler或者rxjava之类的做个延迟。这样保证错开。
-
第二种我觉得比较优雅一点的,在Fragment还没有被切换过来的时候先不加载数据,避免浪费流量。切换过来的时候再请求。
boolean needLoad=true; @Override public void setUserVisibleHint(boolean isVisibleToUser) { if (isVisibleToUser&&needLoad){ mViewModel.loadData(); needLoad=false; } }