您的位置:首页 > 移动开发 > Android开发

android之商品更新排序算法和分页加载算法实现思想

2017-03-12 19:42 507 查看
本文用于总结最近接触到的两个场景的解决方案。

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