7

変な感じがしNullPointerExceptionます。私のコードにはポインティングがありません。また、私のアプリがこのNullPointerExceptionを次の場合にのみ与えることも知っています。

メーカー:Sony Ericsson
製品: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)
4

1 に答える 1

8

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

詳細が必要な場合はAbsListView.contentFits、Gingerbreadソースツリーのメソッドのソースコードを確認してください。

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

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

NULLを返すため、このメソッドがNullPointerException空のリストに対して呼び出された場合にスローされることは明らかです。これはICSソースツリーgetChildAt(0)で修正されました

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メソッドをオーバーライドして、try-catchブロックを使用してonTouchEvent呼び出しを囲むことができます。super.onTouchEvent()もちろん、アプリのすべての場所でカスタムListViewクラスを使用する必要があります。

于 2012-10-23T13:28:12.143 に答える