我正在一个应用程序中工作,我从服务器获得连续响应,但当我更改页面或移动到另一个屏幕时,应用程序停止。我从服务器收到响应,但它没有在listview中更新。 / p>
我也使用了onResume
和onPause
方法,但我仍然收到错误。
代码;
protected class GetTask extends AsyncTask<Void, Void, Integer> {
@Override
protected Integer doInBackground(Void... params) {
// TODO Auto-generated method stub
try {
CallReceiveMsgAPIService();
} catch (Exception e) {
}
return 0;
}
@Override
protected void onPostExecute(Integer result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
try {
if (initiate != 1) {
mMessageHandle.sendEmptyMessage(0);
new GetTask().execute();
}
} else {
mLiveChatList.setAdapter(adapter);
adapter.notifyDataSetChanged();
mLiveChatList.requestLayout();
alert();
}
} catch (Exception e) {
}
}
}
错误:
05-10 14:14:01.213: E/AndroidRuntime(277): FATAL EXCEPTION: main
05-10 14:14:01.213: E/AndroidRuntime(277): 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. [in ListView(2131361857, class android.widget.ListView) with Adapter(class com.$ChatListAdapter)]
05-10 14:14:01.213: E/AndroidRuntime(277): at android.widget.ListView.layoutChildren(ListView.java:1492)
05-10 14:14:01.213: E/AndroidRuntime(277): at android.widget.AbsListView.onTouchModeChanged(AbsListView.java:1960)
05-10 14:14:01.213: E/AndroidRuntime(277): at android.view.ViewTreeObserver.dispatchOnTouchModeChanged(ViewTreeObserver.java:591)
05-10 14:14:01.213: E/AndroidRuntime(277): at android.view.ViewRoot.ensureTouchModeLocally(ViewRoot.java:2021)
05-10 14:14:01.213: E/AndroidRuntime(277): at android.view.ViewRoot.ensureTouchMode(ViewRoot.java:2005)
05-10 14:14:01.213: E/AndroidRuntime(277): at android.view.ViewRoot.handleMessage(ViewRoot.java:1774)
05-10 14:14:01.213: E/AndroidRuntime(277): at android.os.Handler.dispatchMessage(Handler.java:99)
05-10 14:14:01.213: E/AndroidRuntime(277): at android.os.Looper.loop(Looper.java:123)
05-10 14:14:01.213: E/AndroidRuntime(277): at android.app.ActivityThread.main(ActivityThread.java:4627)
05-10 14:14:01.213: E/AndroidRuntime(277): at java.lang.reflect.Method.invokeNative(Native Method)
05-10 14:14:01.213: E/AndroidRuntime(277): at java.lang.reflect.Method.invoke(Method.java:521)
05-10 14:14:01.213: E/AndroidRuntime(277): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
05-10 14:14:01.213: E/AndroidRuntime(277): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
05-10 14:14:01.213: E/AndroidRuntime(277): at dalvik.system.NativeStart.main(Native Method)
任何人都可以让我离开这个.. @谢谢
答案 0 :(得分:0)
在列表中发生更改后调用adapter.notifyDataSetChanged();
以通知listView
列表内容已更改。这肯定会解决这个错误。
protected class GetTask extends AsyncTask<Void, Void, Integer> {
public interface TaskListener
{
public void updateResult(Object result);
}
private TaskListener listener;
@Override
protected Integer doInBackground(Void... params) {
// TODO Auto-generated method stub
try {
CallReceiveMsgAPIService();
} catch (Exception e) {
}
return 0;
}
@Override
protected void onPostExecute(Integer result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
try {
if (initiate != 1) {
mMessageHandle.sendEmptyMessage(0);
new GetTask().execute();
}
} else {
listener.updateResult(result);
//mLiveChatList.setAdapter(adapter);
//adapter.notifyDataSetChanged();
// mLiveChatList.requestLayout();
// alert();
}
} catch (Exception e) {
}
}
}
在activity中实现此接口TaskListener,并在updateresult方法中执行代码注释。