android之商品更新排序算法和分页加载算法实现思想
2017-03-12 19:42
507 查看
本文用于总结最近接触到的两个场景的解决方案。
1.商家端管理商品排序(拖动排序,拖动效果实现非本文重点),提交新的排序到服务器端更新,买家端根据该商家端新的商品排序来显示商品列表。
2.浏览资讯列表,服务器每次只返回5条数据,客户端滑到底部重新请求服务器继续加载额外的5条数据,利于客户端节省流量(尤其是每个item都要加载图片的场景)。
一、商品更新排序算法
1.商家端进入商品管理页,拖动管理商品排序后,提交新排序到服务器:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202012/15/40bf2ed55749f510d96be8c87d15d136)
通过偶数位的数值(17,16,15,...,1)可知,该商家共有17件商品。
2.服务器端解析字符串并更新排序:
二.分页加载实现思想
1.首次启动资讯页,用ListView显示资讯列表,定义frag值为-1,传给服务器,服务器返回最新的5条资讯,按id(主键)降序,(如5条资讯id:55,54,53,52,51)。
2.客户端解析数据,更新frag值为5条数据中最小id,如51,将51提交给服务器,服务器判断frag不为-1,,返回id<51的最新5条数据。(如:50,49,48,47,46)。
3.重复执行步骤2,整个加载过程服务器接收的frag依次为:-1,51,46,41,36...这样即使有新的资讯加到数据库,也不会出现数据重复的情况,因为其id大于55,不在加载范围内。
软件资讯页截图:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202012/15/445244888e1cc3e04f3558dc1c2d2c6c)
服务器端打印情况,minId即上文的frag:
1.商家端管理商品排序(拖动排序,拖动效果实现非本文重点),提交新的排序到服务器端更新,买家端根据该商家端新的商品排序来显示商品列表。
2.浏览资讯列表,服务器每次只返回5条数据,客户端滑到底部重新请求服务器继续加载额外的5条数据,利于客户端节省流量(尤其是每个item都要加载图片的场景)。
一、商品更新排序算法
1.商家端进入商品管理页,拖动管理商品排序后,提交新排序到服务器:
StringBuilder sb = new StringBuilder(); /** * goodsDatas(商品对象的ArrayList)已是新排序,拖动时通过Collections.swap() * 实现顺序更新 */ for (int i = 0, n = goodsDatas.size(); i < n; i++) { sb.append(goodsDatas.get(i).getGoods_id() + "#" + (n - i) + "#"); // 字符串拼接:商品id,序号,商品id,序号,商品id,序号...服务器解析并更新所有序号 } // 将sb.toString()提交至服务器sb.toString()的Log图:
通过偶数位的数值(17,16,15,...,1)可知,该商家共有17件商品。
2.服务器端解析字符串并更新排序:
/** * 商家给商品排序 * * @param con * :数据库连接 * @param order * :排序字符串 * @return * @throws Exception */ public int editGoodsOrder(Connection con, String order) throws Exception { String[] sourceStrArray = order.split("#");//分割字符串 String sql = null; PreparedStatement pstmt = null; for (int i = 0; i < sourceStrArray.length; i += 2) { // 根据id更新每个商品的序号 sql = "update t_mobile_goods set ch_order=? where goods_id=?"; pstmt = con.prepareStatement(sql); pstmt.setInt(1, Integer.parseInt(sourceStrArray[i + 1]));//序号 pstmt.setString(2, sourceStrArray[i]);//id pstmt.executeUpdate(); } return 1; }这是我目前想到最简单的解决方案了,还有待改进,可以在更新数据库前提取商品序号,如果为新序号等于原序号则不进行更新,这样减少了数据库写操作,但也增加了判断语句及数据库读操作。
二.分页加载实现思想
1.首次启动资讯页,用ListView显示资讯列表,定义frag值为-1,传给服务器,服务器返回最新的5条资讯,按id(主键)降序,(如5条资讯id:55,54,53,52,51)。
2.客户端解析数据,更新frag值为5条数据中最小id,如51,将51提交给服务器,服务器判断frag不为-1,,返回id<51的最新5条数据。(如:50,49,48,47,46)。
3.重复执行步骤2,整个加载过程服务器接收的frag依次为:-1,51,46,41,36...这样即使有新的资讯加到数据库,也不会出现数据重复的情况,因为其id大于55,不在加载范围内。
软件资讯页截图:
服务器端打印情况,minId即上文的frag:
相关文章推荐
- Android实现数据库中数据分页加载的功能
- Android逐条加载ListView,实现动画更新
- Android实现listview动态加载数据分页的两种方法
- android 实现listview的分页加载
- android UI进阶之实现listview的分页加载
- android UI进阶之实现listview的分页加载
- android UI进阶之实现listview的分页加载
- Android腾讯微博客户端开发5:利用FootView实现ListView滑动动态加载实现分页
- Android中Listview实现分页加载效果OnScrollListener
- php+mysql+jqueryAjax实现商品分页加载
- android UI进阶之实现listview的分页加载
- Android实现Listview异步加载网络图片并动态更新的方法
- android中分页加载的实现:)
- Android之ListView分页加载数据功能实现
- android 自定义ListView实现下拉刷新、分页加载、点击事件——自定义控件学习(七)
- Android基本控件之listView(三)<用ListView实现分页加载>
- Android中Listview实现分页加载效果OnScrollListener
- Android中如何实现ListView的分页加载
- Android开发之ListView利用OnScrollListener实现分页加载数据
- ListView 实现像Android Market那样 分页加载 滚动加载