明明执行了notifyDataSetChanged()方法,但是还是会报The content of adapter has changed,but can't receive a notify异常!
原因是,原来不只是这一句代码要在主线程中,而且改变数据内容的代码也要在主线程中!否则会出现不一致的异步问题,你就会发现,跑断点时正常,运行时出错!
修改前:
//刷新完成变成第二页 mPage = 1; List l = JsonUtils.parseJsonArray(jsobj.getJSONArray("results")); mListData.clear(); mListData.addAll(l); Main.sHandler.post(new Runnable() { @Override public void run() { //更新数据 mListViewAdapter.notifyDataSetChanged(); // 千万别忘了告诉控件刷新完毕了哦! mRefreshLayout.refreshFinish(PullToRefreshLayout.SUCCEED); } });修改后:
//刷新完成变成第二页 mPage = 1; final List l = JsonUtils.parseJsonArray(jsobj.getJSONArray("results")); Main.sHandler.post(new Runnable() { @Override public void run() { //更新数据 mListData.clear(); mListData.addAll(l); mListViewAdapter.notifyDataSetChanged(); // 千万别忘了告诉控件刷新完毕了哦! mRefreshLayout.refreshFinish(PullToRefreshLayout.SUCCEED); } });其中mListData是和adapter关联的数据集合,修改它也要在主线程中!!!
谢谢点击打开链接