做android 开发遇到的问题及解决办法记录
问题一 通过Listview 加载本地数据库数据时报错:The content of the adapter has changed but ListView did not receive a notification. Make sure the content of your adapter is not modified
产生原因,我通过另外一个线程去获取数据库数据并把得到的数据加入到listView的adapter的数据源list里面,数据获取过后我就通过Handler.sendEmptyMessage通知主UI线程刷新ListView,Handler接到消息后在uI线程更新lisView,结果就报以上错误。居分析加网上百度得出参数原因是adapter里的数据更新与adapter调用notifyDataSetChanged()刷新listview之间存在延时意思是Adapter数据改变源和list刷新不及时。我的错误的具体原因是在非UI线程更新了Adapter的数据源。然后在通知UI线程去更新listview这个过程期间存在延迟。
解决办法:
用一个临时变量list在数据获取线程得到数据。然后Hundle接收到消息的HandlerMessage方法里在把临时变量值添加到adapter的数据源list里面,然后在调用adapter.notifyDataSetChenged()来刷新ListView展示最新内容
问题二 ListView 通过开启一个线程获取本地数据库数据后在用adapter调用notifyDataSetChanged()刷新ListVew不起作用没有刷新
参数原因:我直接把数据库获取的list数据通过"="赋值给了listview数据源。导致没法刷新。因为我通过这个方法赋值只是让数据源list指向数据库方法获取的list对象的地址。而数据源list本身原来的地址的数据是没有改变的。又因为adpter调用notifyDataSetChanged()实现机制是检查adaper数据源list地址的数据有没有改变如果改变就刷新如果没有改变就不刷新,所以我的做法是没改变的。才导致刷新无效
解决方法,用一个变量list来得到数据库获取的数据然后把该值通过数据源List的addAll把值添加到数据源里面。这样数据源地址的值也就改变了。adpter在调用notifyDataSetChanged()就有效了。
更多相关文章
- 简单的三方登录SDK示例,Android(安卓)Activity之间数据的传递
- JSONArray的使用
- Android(安卓)安全 —— 本地拒绝服务漏洞
- Android数据库操作查询中Cursor类的问题
- Android联系人数据库全解析(3)
- Android联系人数据库全解析(4)
- 使用NDK开发SQLite3
- Android开发之数据保存技术(一)
- mybatisplus的坑 insert标签insert into select无参数问题的解决