哎嘛 的列表页面数据与oschina网站不同步

魏梓雄 发布于 2014/10/21 23:59
阅读 617
收藏 2

@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

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

再次感谢你贡献的代码

加载中
0
Tonlin
Tonlin
感谢你对哎嘛的支持,是会存在你所描述的这些问题,由于时间问题我直接使用了官方客户端的缓存策略。最近一段时间比较忙没有时间去更新哎嘛。等我下次更新我会认真参考你的建议,谢谢你的支持
0
火蚁
火蚁

其实有些数据不需要时时的保持与服务器同步,可以设置一个缓存的有效时间

这个有效时间可以根据不同的数据来设定,比如资讯和帖子的缓存时间可以长很多,而动弹这些数据变动比较快的数据,就缓存时间短些,以尽可能地与服务器数据同步。

另外这个有效时间也可以根据网络环境来设定,wifi<移动网络;

官方老的方式确实不太好,只缓存了第一页的数据

0
ilex
ilex
确实是有这问题
0
nnnm
nnnm
现在的版本已经解决这个问题了,更新一下代码吧!
0
林志煌
林志煌
本地旧数据的评论数如何服务器同步
返回顶部
顶部