7

私は奇妙なNullPointerExceptionを取得します。私のコードに指し示すことはありません。また、私は私のアプリだけでこのNullPointerExceptionが与えられることを知っている:android.widget.AbsListView.contentFits(AbsListView.java:722)でのNullPointerException

メーカー:ソニー・エリクソン
製品:MT11i_1256-3856
Androidのバージョン:2.3.4

任意のアイデア?

java.lang.NullPointerException 
    at android.widget.AbsListView.contentFits(AbsListView.java:722) 
    at android.widget.AbsListView.onTouchEvent(AbsListView.java:2430) 
    at android.widget.ListView.onTouchEvent(ListView.java:3447) 
    at android.view.View.dispatchTouchEvent(View.java:3952) 
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:995) 
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1034) 
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1034) 
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1034) 
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1034) 
    at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1711) 
    at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1145) 
    at android.app.Activity.dispatchTouchEvent(Activity.java:2096) 
    at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1695) 
    at android.view.ViewRoot.deliverPointerEvent(ViewRoot.java:2217) 
    at android.view.ViewRoot.handleMessage(ViewRoot.java:1901) 
    at android.os.Handler.dispatchMessage(Handler.java:99) 
    at android.os.Looper.loop(Looper.java:130) 
    at android.app.ActivityThread.main(ActivityThread.java:3701) 
    at java.lang.reflect.Method.invokeNative(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:507) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:624) 
    at dalvik.system.NativeStart.main(Native Method) 

答えて

8

私のアプリにも同様の例外がたくさんあります。私はAndroid OSソースコードでいくつかの調査を行い、結論を下しました。これはAndroid OS Gingerbread以下のバグであり、Ice Cream Sandwichで修正されています。

あなたはより多くの細部をしたい場合は、ジンジャーブレッドのソースツリーに方法AbsListView.contentFitsのソースコードを見て:

private boolean contentFits() { 
    final int childCount = getChildCount(); 
    if (childCount != mItemCount) { 
     return false; 
    } 

    return getChildAt(0).getTop() >= 0 && getChildAt(childCount - 1).getBottom() <= mBottom; 
} 

それは空のリストのために呼び出された場合getChildAt(0)はNULLを返しますので、この方法は、NullPointerExceptionを投げることは明らかです。あなたが見ることができるようにこれはICS source tree

private boolean contentFits() { 
    final int childCount = getChildCount(); 
    if (childCount == 0) return true; 
    if (childCount != mItemCount) return false; 

    return getChildAt(0).getTop() >= mListPadding.top && 
      getChildAt(childCount - 1).getBottom() <= getHeight() - mListPadding.bottom; 
} 

に固定し、(childCount == 0)のためのチェックがあります。

この問題の回避策について - あなたはあなた自身のクラスMyListView extends ListView、オーバーライドメソッドonTouchEventを宣言し、try-catchブロックでsuper.onTouchEvent()への呼び出しを囲むことができます。もちろん、カスタムのListViewクラスをアプリケーションのすべての場所で使用する必要があります。

関連する問題