码迷,mamicode.com
首页 > 移动开发 > 详细

如何在App中实现朋友圈功能之七快速实现上拉加载朋友圈功能——箭扣科技Arrownock

时间:2015-12-02 14:46:41      阅读:184      评论:0      收藏:0      [点我收藏+]

标签:服务器   朋友   数据库   如何   

如何在App中实现朋友圈功能

之七

快速实现上拉加载朋友圈功能

 

逻辑分析:

取出缓存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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!