7

मुझे एक अजीब NullPointerException मिलता है। मेरे कोड में कोई संकेत नहीं है। इसके अलावा मुझे पता है कि मेरा ऐप्स केवल पर इस NullPointerException देता है:nullPointerException atroid.widget.AbsListView.contentFits (AbsListView.java:722)

निर्माता: सोनी एरिक्सन
उत्पाद: MT11i_1256-3856
एंड्रॉयड संस्करण: 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

मेरे पास हमारे ऐप्स में बहुत सारे अपवाद हैं। मैंने एंड्रॉइड ओएस सोर्स कोड में कुछ शोध किया, और एक निष्कर्ष निकाला - यह एंड्रॉइड ओएस जिंजरब्रेड और नीचे की बग है, और इसे आइस क्रीम सैंडविच में तय किया गया है।

आपको और अधिक जानकारी चाहते हैं, जिंजरब्रेड स्रोत पेड़ में विधि AbsListView.contentFits के स्रोत कोड को देखो:

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

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

यह स्पष्ट है कि इस विधि NullPointerException फेंक देते हैं, तो खाली सूची के लिए कहा जाता है, क्योंकि getChildAt(0) NULL वापस आ जाएगी। यह 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) का चेक है। कर सकते हैं आप एक कोशिश पकड़ ब्लॉक के साथ super.onTouchEvent() करने के लिए अपने ही वर्ग MyListView extends ListView, ओवरराइड विधि onTouchEvent और कॉल चारों ओर की घोषणा -

इस समस्या के लिए एक वैकल्पिक हल के बारे में। बेशक आपको अपने ऐप के सभी स्थानों पर अपनी कस्टम लिस्ट व्यू क्लास का उपयोग करने की आवश्यकता होगी।