本文介绍了崩溃的ListView在AbsListView.obtainView的ListActivity的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我看在使用ContentObserver一个ListActivity内容更新如下:
I'm watching content updates on a ListActivity using a ContentObserver as follows:
protected void onCreate(Bundle savedState)
{
super.onCreate(savedState);
ContentResolver cr = getContentResolver();
Cursor cursor = cr.query(TrackHeader.CONTENT_URI, sTrackListProjection, null, null, null);
startManagingCursor(cursor);
this.mAdapter = new TrackHeaderDataAdapter(this, R.layout.track_list_item, cursor, sTrackListProjection, null);
setListAdapter(mAdapter);
Handler handler = new Handler();
mTrackHeaderObserver = new ContentObserver(handler) {
@Override
public boolean deliverSelfNotifications() {
return false;
}
@Override
public void onChange(boolean selfChange) {
super.onChange(selfChange);
ContentResolver cr = getContentResolver();
mAdapter.changeCursor(cr.query(TrackHeader.CONTENT_URI, sTrackListProjection, null, null, null));
}
};
getContentResolver().registerContentObserver (TrackHeader.CONTENT_URI, true, mTrackHeaderObserver);
}
此内容观察者似乎是确定 - 它被调用回UI线程上,但我得到以下随机崩溃pretty的predictably底层的ListView上:
This content observer seems to be ok -- it gets called back on the UI thread but I am getting the following random crash pretty predictably on the underlying ListView:
02-21 14:06:00.440: ERROR/AndroidRuntime(739): java.lang.NullPointerException
02-21 14:06:00.440: ERROR/AndroidRuntime(739): at android.widget.AbsListView.obtainView(AbsListView.java:1276)
02-21 14:06:00.440: ERROR/AndroidRuntime(739): at android.widget.ListView.makeAndAddView(ListView.java:1668)
02-21 14:06:00.440: ERROR/AndroidRuntime(739): at android.widget.ListView.fillDown(ListView.java:637)
02-21 14:06:00.440: ERROR/AndroidRuntime(739): at android.widget.ListView.fillSpecific(ListView.java:1224)
02-21 14:06:00.440: ERROR/AndroidRuntime(739): at android.widget.ListView.layoutChildren(ListView.java:1499)
02-21 14:06:00.440: ERROR/AndroidRuntime(739): at android.widget.AbsListView.onLayout(AbsListView.java:1113)
02-21 14:06:00.440: ERROR/AndroidRuntime(739): at android.view.View.layout(View.java:6830)
02-21 14:06:00.440: ERROR/AndroidRuntime(739): at android.widget.FrameLayout.onLayout(FrameLayout.java:333)
02-21 14:06:00.440: ERROR/AndroidRuntime(739): at android.view.View.layout(View.java:6830)
02-21 14:06:00.440: ERROR/AndroidRuntime(739): at android.widget.FrameLayout.onLayout(FrameLayout.java:333)
02-21 14:06:00.440: ERROR/AndroidRuntime(739): at android.view.View.layout(View.java:6830)
02-21 14:06:00.440: ERROR/AndroidRuntime(739): at android.widget.FrameLayout.onLayout(FrameLayout.java:333)
02-21 14:06:00.440: ERROR/AndroidRuntime(739): at android.view.View.layout(View.java:6830)
02-21 14:06:00.440: ERROR/AndroidRuntime(739): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1119)
02-21 14:06:00.440: ERROR/AndroidRuntime(739): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:998)
02-21 14:06:00.440: ERROR/AndroidRuntime(739): at android.widget.LinearLayout.onLayout(LinearLayout.java:918)
02-21 14:06:00.440: ERROR/AndroidRuntime(739): at android.view.View.layout(View.java:6830)
02-21 14:06:00.440: ERROR/AndroidRuntime(739): at android.widget.FrameLayout.onLayout(FrameLayout.java:333)
02-21 14:06:00.440: ERROR/AndroidRuntime(739): at android.view.View.layout(View.java:6830)
02-21 14:06:00.440: ERROR/AndroidRuntime(739): at android.widget.FrameLayout.onLayout(FrameLayout.java:333)
02-21 14:06:00.440: ERROR/AndroidRuntime(739): at android.view.View.layout(View.java:6830)
02-21 14:06:00.440: ERROR/AndroidRuntime(739): at android.widget.FrameLayout.onLayout(FrameLayout.java:333)
02-21 14:06:00.440: ERROR/AndroidRuntime(739): at android.view.View.layout(View.java:6830)
02-21 14:06:00.440: ERROR/AndroidRuntime(739): at android.view.ViewRoot.performTraversals(ViewRoot.java:996)
02-21 14:06:00.440: ERROR/AndroidRuntime(739): at android.view.ViewRoot.handleMessage(ViewRoot.java:1633)
02-21 14:06:00.440: ERROR/AndroidRuntime(739): at android.os.Handler.dispatchMessage(Handler.java:99)
02-21 14:06:00.440: ERROR/AndroidRuntime(739): at android.os.Looper.loop(Looper.java:123)
02-21 14:06:00.440: ERROR/AndroidRuntime(739): at android.app.ActivityThread.main(ActivityThread.java:4363)
02-21 14:06:00.440: ERROR/AndroidRuntime(739): at java.lang.reflect.Method.invokeNative(Native Method)
02-21 14:06:00.440: ERROR/AndroidRuntime(739): at java.lang.reflect.Method.invoke(Method.java:521)
02-21 14:06:00.440: ERROR/AndroidRuntime(739): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
02-21 14:06:00.440: ERROR/AndroidRuntime(739): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
02-21 14:06:00.440: ERROR/AndroidRuntime(739): at dalvik.system.NativeStart.main(Native Method)
02-21 14:09:56.159: ERROR/AndroidRuntime(749): ERROR: thread attach failed
02-21 14:09:59.480: ERROR/AndroidRuntime(760): ERROR: thread attach failed
02-21 14:12:19.449: ERROR/AndroidRuntime(778): ERROR: thread attach failed
02-21 14:12:22.779: ERROR/AndroidRuntime(789): ERROR: thread attach failed
02-21 14:12:26.479: ERROR/gralloc(51): [unregister] handle 0x3f13b8 still locked (state=40000001)
任何人都见过这样的事情这之前 - 被难倒就这一个了几天......
Anyone seen anything like this before -- been stumped on this one for a few days...
添
推荐答案
我也有类似的堆栈跟踪,发现我是从我的getView()在某些情况下,方法返回一个空。
I had a similar stack trace and discovered that I was returning a null from my getView() method in certain cases.
这篇关于崩溃的ListView在AbsListView.obtainView的ListActivity的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!