如何在App中实现朋友圈功能之六快速实现下拉加载朋友圈功能——箭扣科技Arrownock
2015-12-02 12:05
816 查看
如何在App中实现朋友圈功能
之六
快速实现下拉加载朋友圈功能
实现逻辑:根据上次下拉刷新的时间从数据库加载出limit(比如10)条post,判断总数据条数:a. 如果总数据大于limit条,清空当前缓存的postList,将服务器获取的post存入数据库,根据本地数据库里的最新一条like的created_at和最新一条comment的created_at作为begin_time去服务器获取like和comment,全部获取完成后,从数据库取出10条post以及对应的like和comment,最后刷新界面。b. 如果总数据大于0,小于等于limit,则不需要清空当前缓存的postList,而是直接到服务器取like和comment的数据,全部获取完成后,将对应的like和comment添加到缓存的postList和服务器获取的post中,再把从服务器获取的post按顺序加载到缓存的postList中,最后刷新界面。c. 如果总数据等于0,判断当前缓存postList的是否为空,如果为空,那么什么都不做。如果不为空,那么就获取comment和like,全部加载好后,刷新界面。 查询逻辑实现(以Android系统为例)://下拉加载朋友圈 private void pullToQueryPost() { // 根据上次上拉的时间从服务器获取post Map<String, Object>params = loadPullToQueryPostParams(); try { anSocial.sendRequest("posts/query.json", AnSocialMethod.GET, params, new IAnSocialCallback() { @Override public void onSuccess(JSONObject response) { try { JSONObjectmeta = response.getJSONObject("meta"); int total =meta.getInt("total"); JSONArraypostsJson = response.getJSONObject("response") .getJSONArray("posts"); // 如果post的数量大于limit if (total > POST_LIMIT) { // 存入数据库 savePostToDB(postsJson); //清空当前缓存的postList postList.clear(); postList.addAll(tempPostList); /* 根据本地数据库里的最新一条like的created_at和 最新一条comment的created_at作为begin_time 去服务器获取like和comment */ loadLikeAndCommentByLatestData(true); } // 如果post的数量大于0,小于等于limit else if (total <= POST_LIMIT&& total > 0) { // 存入数据库 savePostToDB(postsJson); postList.addAll(0, tempPostList); /* 根据本地数据库里的最新一条like的created_at和 最新一条comment的created_at 作为begin_time去服务器获取like和comment*/ loadLikeAndCommentByLatestData(true); } // 如果post的数量等于0 else { // 如果size等于0,刷新界面 if (postList.isEmpty()) { runOnUiThread(new Runnable() { @Override public void run() { mPullRefreshListView.onRefreshComplete(); } }); } // 如果size不等于0 else { /* 根据本地数据库里的最新一条like的created_at和 最新一条comment的created_at 作为 begin_time去服务器获取like和comment */ loadLikeAndCommentByLatestData(true); } } } catch (JSONException e) { showToast("查询朋友圈消息失败了呢"); Log.e("queryPost", "queryPost==JSONException"); runOnUiThread(new Runnable() { @Override public void run() { mPullRefreshListView.onRefreshComplete(); } }); } } @Override public void onFailure(JSONObject response) { showToast("查询朋友圈消息失败了呢"); Log.e("queryPost", "queryPost==" + response); runOnUiThread(new Runnable() { @Override public void run() { mPullRefreshListView.onRefreshComplete(); } }); } }); } catch(ArrownockException e) { showToast("查询朋友圈消息失败了呢"); Log.e("queryPost", "queryPost==ArrownockException"); runOnUiThread(new Runnable() { @Override public void run() { mPullRefreshListView.onRefreshComplete(); } }); } }
参数组装:其中根据上次下拉刷新的时间加载post,实际上就是每次刷新时,往本地缓存例插入了一条记录,下次刷新时取出来。如下是组成到服务器查询Post参数的方法代码:
// 组成查询Post参数 private Map<String, Object>loadPullToQueryPostParams() { Map<String, Object>params = new HashMap<String, Object>(); List<User> userList =UserHelper.getAllUsers(); StringBuilder userIdBuilder= new StringBuilder(); for (User u : userList) { userIdBuilder.append(u.userId).append(","); } String user_id =userIdBuilder.substring(0, userIdBuilder.length() - 1); params.put("wall_id", getString(R.string.wall_id)); //wall_id params.put("user_id", user_id); // 所有好友的user_id long pullTime = SystemMap.getLong(ImppConstants. POST_FRIEND_PULL_TIME, 0); //得到上次下拉刷新的时间 long newPullTime = CommonUtils.getTimeForChinaTimeZone(); SystemMap.setLong(ImppConstants.POST_FRIEND_PULL_TIME , newPullTime); // 将当前时间存入缓存 if (0 != pullTime) { params.put("begin_time", pullTime + 1); } params.put("sort", "-created_at"); //根据created_at倒叙排序 params.put("limit", POST_LIMIT); return params; }
如何在App中实现朋友圈功能系列文章:之一朋友圈实现原理浅析之二快速实现用户信息的自定义之三快速实现双向好友功能之四在朋友圈中添加发送图片功能之五点赞、评论属性详细解析之六快速实现下拉加载朋友圈功能之七快速实现上拉加载朋友圈功能之八页面加载功能的逻辑与实现
本文出自 “箭扣科技Arrownock” 博客,转载请与作者联系!
相关文章推荐
- 如何在App中实现朋友圈功能之五点赞、评论属性详细解析——箭扣科技Arrownock
- Android动画_基本
- 如何在App中实现朋友圈功能之四在朋友圈中添加发送图片功能——箭扣科技Arrownock
- 如何在App中实现朋友圈功能之三快速实现双向好友功能——箭扣科技Arrownock
- 《从零开始学Swift》学习笔记(Day43)——构造函数继承
- 如何在App中实现朋友圈功能之二快速实现用户信息的自定义——箭扣科技Arrownock
- 如何在App中实现朋友圈功能之一朋友圈实现原理浅析——箭扣科技Arrownock
- javascript 中的call、apply、bind
- 一张图让你了解安卓事件处理流程的走向
- iOS 代码块在程序中只执行一次
- android事件分发、拦截、处理(未完)
- 《从零开始学Swift》学习笔记(Day43)——构造函数继承
- iOS证书说明和发布内购流程整理
- iOS 8 新特性总结
- iOS_导入libxml2.2框架后,找不到<libxml/tree.h>的解决办法
- 微信公众号开发---红包模块
- iOS开发多线程篇—GCD介绍
- android 程序防止被360或者系统终止
- Android Studio Unable to execute DX
- Android 自定义的Dialog