扫码关注官方订阅号
比如第一次安装打开数据有100条,可是关闭第二次打开就是有200条数据....就是重复了....可以怎么解决呢....
ringa_lee
这种情况,最好加log、加断点调试。从读取数据库,到显示在ListView中(中间是否经过Adapter?),这整个过程中,到底在哪一步数据从100条变成了200条?数据是重复的吗?还是仅仅由于listView复用的原因,导致显示重复了,而数据并没有重复?问题描述就一句话,如何让别人回答?
感觉是activity生命周期使用的不对,我猜你是在oncreate中调用的读取数据操作,而且没有对应的释放操作1.看看你的数据加载过后是在内存里存着吗,别读出来有存到那个文件里了2.你说关闭了再进去又出来了,我的猜想就是你返回出去,但是activity没有销毁,数据还在内存里存着,然后你进入,有调用了一次加载数据,这样就会出现两次
PS请多添加点信息到问题了,这样其他人才会更好的帮你解答
告诉你一个最简单的方法:使用SharedPreference来存储一个变量,用来记录是否已经导入了SQLite数据。
我知道,光有思路是不够的,提供一个盲打的代码给你参考哈:
public void importSqliteData() { SharedPreference prefs = context.getSharedPreferences("data_sqlite", Context.MODE_PRIVATE); if (prefs.getBoolean("is_store", false)) { // 数据已经读取,直接返回即可 return; } else { // TODO:读取sqlite数据 // 保存读取状态 SharedPreference.Editor editor = prefs.edit(); editor.putBoolean("is_store", true); editor.commit(); } }
首先你要确定是不是数据库中表的数据重复了,可以打开sqlite数据库文件看看表记录。如果数据库没有问题,你再看看listview展示那一步是不是有问题,就像@li21所说,打个断点跟踪一下,一步一步排查问题的原因。
你的读取操作是不是写在onResume,好好看看你的读取操作写的位置,或者有没有写入操作。
记录个ID,下次查找大于此ID的记录 就可以了么
应该是你的数据是在onResume中获取的,每次回到这个Activity的时候都会走到onResume中去。
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
这种情况,最好加log、加断点调试。从读取数据库,到显示在ListView中(中间是否经过Adapter?),这整个过程中,到底在哪一步数据从100条变成了200条?数据是重复的吗?
还是仅仅由于listView复用的原因,导致显示重复了,而数据并没有重复?
问题描述就一句话,如何让别人回答?
感觉是activity生命周期使用的不对,我猜你是在oncreate中调用的读取数据操作,而且没有对应的释放操作
1.看看你的数据加载过后是在内存里存着吗,别读出来有存到那个文件里了
2.你说关闭了再进去又出来了,我的猜想就是你返回出去,但是activity没有销毁,数据还在内存里存着,然后你进入,有调用了一次加载数据,这样就会出现两次
PS请多添加点信息到问题了,这样其他人才会更好的帮你解答
告诉你一个最简单的方法:使用SharedPreference来存储一个变量,用来记录是否已经导入了SQLite数据。
我知道,光有思路是不够的,提供一个盲打的代码给你参考哈:
首先你要确定是不是数据库中表的数据重复了,可以打开sqlite数据库文件看看表记录。
如果数据库没有问题,你再看看listview展示那一步是不是有问题,就像@li21所说,打个断点跟踪一下,一步一步排查问题的原因。
你的读取操作是不是写在onResume,好好看看你的读取操作写的位置,或者有没有写入操作。
记录个ID,下次查找大于此ID的记录 就可以了么
应该是你的数据是在onResume中获取的,每次回到这个Activity的时候都会走到onResume中去。