逻辑分析:
取出缓存postList里的最后一条数据postList
a. 如果lastPost存在,说明缓存里有数据,接着取出数据库中与lastPost时间最接近的一条latestPost,以它们的created_at作为关键查询条件,去服务器取limit条(比如10)数据:
1. 如果服务器返回的Post数量大于0,将Post存入数据库,之后需要做两个查询动作:
查询出新的Like和Comment:根据本地数据库里的最新一条Like的created_at和最新一条Comment的created_at作为begin_time去服务器获取Like和Comment。
查询出从服务器获取到的limit条post的Comment和Like:根据postId从服务器查询出Comment和Like,加载出来的数据存入数据库,等全部加载完毕,刷新界面。
2. 如果服务器返回的数据等于0,说明服务器没有这中间的数据,剩余的数据从本地数据库中取,从本地数据库中取出limit条数据,然后根据本地数据库里的最新一条Like的created_at和最新一条Comment的created_at作为begin_time去服务器获取Like和Comment,全部加载完毕后,刷新界面。
b. 如果lastPost不存在,说明缓存postList没有数据,不用做任何动作,刷新界面提示没有更多消息即可。
实现逻辑代码:
以安卓系统为例:
// 获取下一页Post private void getNextPageData() { Post lastPost = null; Post latestPost = null; if (null != postList && !postList.isEmpty()) { lastPost = postList.get(postList.size() - 1); } // 如果lastPost存在,从服务器获取post if (null != lastPost) { //取出数据库中与lastPost时间最接近的一条latestPost latestPost = PostHelper.getLatestPostByTime(lastPost.createdAt); Map<String, Object> params = loadGetNextQueryPostParams(lastPost,latestPost); try { anSocial.sendRequest("posts/query.json", AnSocialMethod.GET, params, new IAnSocialCallback() { @Override public void onSuccess(final JSONObject response) { try { JSONObject meta =response.getJSONObject("meta"); int total = meta.getInt("total"); JSONArray postsJson= response.getJSONObject("response") .getJSONArray("posts"); // 如果post的数量大于等于limit if (total > 0) { // 存入数据库 savePostToDB(postsJson); postList.addAll(tempPostList); // 先根据根据latestLike和latestComment的createdAt // 获取like和comment // 再根据postId取出like和comment loadLikeAndCommentByLatestData(); } else { // 从数据库获取缓存postList的lastPost时间往后limit数量的post getPostFromDBByTime(POST_LIMIT, postList .get(postList.size() - 1)); // 根据latestLike和latestComment的createdAt // 获取like和comment,刷新 loadLikeAndCommentByLatestData(true); } } catch (Exception e) { } } @Override public void onFailure(JSONObject response) { } }); } catch (ArrownockException e) { } } // 如果lastPost不存在,什么都不做 else { runOnUiThread(new Runnable() { @Override public void run() { mPullRefreshListView.onRefreshComplete(); } }); } }
如何在App中实现朋友圈功能系列文章:
之一朋友圈实现原理浅析
之二快速实现用户信息的自定义
之三快速实现双向好友功能
之四在朋友圈中添加发送图片功能
之五点赞、评论属性详细解析
之六快速实现下拉加载朋友圈功能
之七快速实现上拉加载朋友圈功能
之八页面加载功能的逻辑与实现
本文出自 “箭扣科技Arrownock” 博客,转载请与作者联系!
如何在App中实现朋友圈功能之七快速实现上拉加载朋友圈功能——箭扣科技Arrownock
原文地址:http://arrownock.blog.51cto.com/10638334/1718792