今天在开发中遇到一个错误,导致Android应用运行时出现FC(Force Close)。如下是Logcat导出的完整错误提示:
07-09 09:05:07.295: E/AndroidRuntime(20323): java.lang.IllegalStateException: The content of the adapter has changed but ListView did not receive a notification. Make sure the content of your adapter is not modified from a background thread, but only from the UI thread.
那句红色的是重要的提示,大概意思是:确保适配器的内容不是从子线程中更改,而是从UI线程中更改。至此大概发现了出现该错误的原因是在Activity的onCreate()方法创建的时候是通过AsyncTask来绑定数据到Adapter中,最后再执行
listView.setAdapter(Adapter)。
而该Activity在设计的时候在头部采取下拉刷新,底部点击查看更多的设计方式。所以导致我在处理底部数据的时候也用到AsyncTask来处理数据,并让适配器notifyDataSetChanged()。由于这两次数据更新notifyDataSetChanged()是在不同的子线程中去执行的,所以导致出错。
为避免出错,需将数据更新与notifyDataSetChanged()放在UI线程(也就是主线程)中执行。