5
回答
哎嘛 的列表页面数据与oschina网站不同步
终于搞明白,存储TCO原来是这样算的>>>   

@Tonlin 你好,想跟你请教个问题:
    很感谢你贡献了一个很棒的APP源码,最新我在分析列表页面的上拉加载,下拉刷新,请求与缓存数据如何去平衡的问题。http://my.oschina.net/wzi90921/blog/335010。没人给我回复,只能自己动手查看你的处理逻辑,希望能从你的代码中学到更好的解决方法。
    前提条件:可以正常访问网络!
    下拉刷新,都会传递pageIndex=0,请求新的数据。
    上拉加载,会先判断是否加载过,如果加载过,则读取缓存数据。

protected void requestData(boolean refresh) {
                String key = getCacheKey();
                if (TDevice.hasInternet()
                                && (!CacheManager.isReadDataCache(getActivity(), key) || refresh)) {
                        sendRequestData();
                } else {
                        readCacheData(key);
                }
        }
不知道,我对你的代码理解是否准确;如果理解有误,麻烦你更正。

基于上面的理解:

2种情况,可能会导致列表数据的不完整性。
    假设条件:本地缓存了从0-10页的数据。
    1.当下拉刷新时:新增的数据超过20条(假设新增了25条数据);那么第0页返回20条数据;当你往上滑动时,触发到了上拉刷新时,那么根据我上面的理解,会加载本地缓存数据(之前已经缓存了);而且新缓存的第一页数据会替换先前缓存的第一页数据,这样的话,列表的数据跟服务端的数据不同步了,缺少第21-25条,26-45条之间的数据。
    2.当下拉刷新时:新增的数据少于20条(假设新增了15条数据);那么第0页返回20条数据;当你往上滑动时,触发到了上拉刷新时,那么根据我上面的理解,会加载本地缓存数据(之前已经缓存了)。因为新增15条数据,返回是20条数据,就有5条数据是之前的。但是新缓存第一页数据会替换先前缓存的第一页数据,这样的话,列表的数据跟服务端的数据不同步了,缺少第21-35条之间的数据。

第20条数据,接下来的 “Monkey HTTP Server ……” 在oschina却是

跟oschina 网站显示的数据不同步。

我的看法:

    看了oschina的API,每次请求时值传递页码,用户下拉刷新,获取第1页;当用户上拉加载时,再次请求第2页,缓存下载的数据,只在无网络的情况下才会加载本地数据。这样可能消耗的流量会多些。

    还有一个问题,为什么缓存的数据不用数据储存,而是用文件的方式呢?

    oschina 的分页API设计有点问题,当用户下拉刷新加载最新的20条,上拉加载更多(传递页码请求服务端),当上一次获取最新的数据 到 触发上拉加载更多这段时间,如果有新增数据,那么服务端的分页也该改变了,新增25条(超过20条),那么加载到的数据,会是新增最后5条+原先第一页前15条。新增15条(少于20条),那么加载到的数据,是原来第一页第5-20条+原先第二页21-25条。

我最近在思考这个问题,http://my.oschina.net/wzi90921/blog/335010

如果你有什么更好的方法,请指点下!

再次感谢你贡献的代码

顶部