1. 概述
在我们开发过程中如果有需要使用数据库的时候,在增删改查时候,有几点需要注意,这里记录下自己在使用数据库时候遇到的几个问题。
数据库去除重复值可参考我之前文章:
android 数据库(sqlite)查询去除重复值
2. 删除数据时候需要注意
如下图所示:
分析上图可知:
1>:这个列表的数据是查询SqliteDatabase数据库之后获取到list集合mDatas,然后在最外层定义一个shoppingList,把mDatas数据add添加到shoppingList集合中;
2>:刚进到屏幕第一屏数据、下拉刷新数据、上拉加载更多数据都用的是 shoppingList集合来设置数据;
这里就出现一个问题,就是如果点击右边红色删除按钮,删除的是 shoppingList集合中的数据,比如现在有4条数据:
删除一条,shoppingList集合就剩下3条数据;
删除一条,shoppingList集合就剩下2条数据;
删除一条,shoppingList集合就剩下1条数据;
删除一条,shoppingList集合就剩0条数据,没有数据了;
然后退出当前页面,这个时候再去添加商品到购物车,然后再次来到这个页面来给这个页面适配数据,发现有5条数据,原因如下:
原因如下:
因为给这个购物车页面填充数据一直操作的都是 shoppingList集合,而一开始查询数据库返回的集合 mDatas一直都没有变,所以导致 购物车的界面看起来删除一条数据就少一条,删除完了就没有了,此时 shoppingList集合个数变成0个,但是再次进到这个页面时候重新查询数据库获取 mDatas集合,数据库中数据还是有5条,所以每次在这个页面删除完数据之后进来,数据个数没变,和之前一样;
解决方法如下:
1>:在删除 shoppingList集合数据之后,重新查询数据库数据,重新获取 mDatas;
2>:然后遍历 mDatas集合,然后获取数据的id;
3>:然后删除该数据的id即可;
/**
* 删除
*/
@Override
public void childDelete(int position) {
// 从集合中删除数据,并通知adapter刷新
shoppingCartBeanList.remove(position);
// 删除shoppingCartBeanList集合数据后,重新查询数据库获取当前总共数据mDatas
// 然后遍历mDatas,获取到每个 id,然后从数据库中删除对应id即可
mDatas = dao.findAll() ;
for (int i = 0; i < mDatas.size(); i++) {
deleteId = mDatas.get(i).getId();
}
dao.delete(deleteId) ;
adapter.notifyDataSetChanged();
// 然后从数据库中删除
statistics();
}
}