2012-06-20 14 views
10

पर मैंक्रैश ListView.removeFooterView (देखें)

android.widget.ListView lv; lv.removeFooterView(v) 

त्रुटि पर क्रैश रिपोर्ट हो रही है नल पॉइंटर अपवाद नहीं है। मैं उस सूची को देखता हूं खुद को शून्य नहीं है। इसका क्या कारण है? क्या यह सुनिश्चित करना आवश्यक है कि दृश्य को हटाया जाए, शून्य नहीं है? क्या यह पर्याप्त है या क्या मुझे पहले यह भी जांचना होगा कि पाद लेख वास्तव में जोड़ा गया है?

java.lang.NullPointerException 
at android.widget.ListView.removeFooterView(ListView.java:374) 

ऐसा लगता है कि यह विधि पर्याप्त मजबूत होनी चाहिए ताकि क्रैश न हो! यदि यह दृश्य को हटा नहीं सकता है तो यह झूठी वापसी क्यों नहीं करता है?

पीएस। मैं जानना चाहूंगा कि किसी और ने यह देखा है?

उत्तर

13

दुर्भाग्यवश आप इस बात का जिक्र नहीं करते कि एंड्रॉइड संस्करण त्रुटि रिपोर्ट कहां से आ रही है। हालांकि, स्रोत कोड को देखते हुए, एंड्रॉइड 2.1-अपडेट 1 एक अच्छे उम्मीदवार की तरह लगता है।

मैं सिर्फ पूरे विधि में कॉपी बातें स्पष्ट करना होगा:

public boolean removeFooterView(View v) { 
    if (mFooterViewInfos.size() > 0) { 
     boolean result = false; 
     if (((HeaderViewListAdapter) mAdapter).removeFooter(v)) { // <- line 274 
      mDataSetObserver.onChanged(); 
      result = true; 
     } 
     removeFixedViewInfo(v, mFooterViewInfos); 
     return result; 
    } 
    return false; 
} 

अब अधिक नया मंच के कार्यान्वयन के साथ removeFooterView(...) विधि से ऊपर की तुलना:

public boolean removeFooterView(View v) { 
    if (mFooterViewInfos.size() > 0) { 
     boolean result = false; 
     if (mAdapter != null && ((HeaderViewListAdapter) mAdapter).removeFooter(v)) { 
      if (mDataSetObserver != null) { 
       mDataSetObserver.onChanged(); 
      } 
      result = true; 
     } 
     removeFixedViewInfo(v, mFooterViewInfos); 
     return result; 
    } 
    return false; 
} 

आप देख सकते हैं , कुछ सदस्यों के लिए कुछ अतिरिक्त चेक में जोड़ा गया है जो null नहीं हैं। इससे पता चलता है कि पहली विधि वास्तव में लाइन 274 पर mAdapter == null पर असफल हो जाएगी, जबकि इससे नए कार्यान्वयन के साथ कोई दुर्घटना नहीं होगी।

इसके चारों ओर काम करने के लिए, आपको शायद पैटर व्यू को हटाने की कोशिश करने से पहले lv.getAdapter() != null जैसे कुछ जोड़ने की आवश्यकता है।

+0

पाद लेख जोड़ने की नीति क्या है। मुझे यह त्रुटि फिर से FROYO और listView.getFooterCount()> 0. –

+1

पर काम मिल रही है "lv.getAdapter()! = Null" मेरे लिए काम किया – djleop

+0

मुझे एडाप्टर सेट करने के बाद removeFooter() को कॉल करने की संभावना थी । – salcosand

0

आप प्रलेखन आपको लगता है कि है कि वास्तव में मामला है देखेंगे की जाँच हो:

http://developer.android.com/reference/android/widget/ListView.html)

रिटर्न

सच दृश्य हटा दिया गया था, तो, झूठी अगर दृश्य नहीं था एक पाद लेख देखें

तो आपको दृश्य और सूची दोनों के लिए एक शून्य जांच जोड़नी चाहिए या यदि यह एक उत्कृष्ट है अपरिपक्व स्थिति (बहुत ही कम होता है तो इसे अपवाद ब्लॉक में लपेटें)।

+0

अपवाद ब्लॉक में एक शून्य सूचक को लपेटना अभी भी दुर्घटनाग्रस्त हो जाएगा! –

+0

प्रलेखन यह इंगित नहीं करता है कि एक नल दृश्य को हटाने का प्रयास करने से आपके एप्लिकेशन को क्रैश हो जाएगा। –

+0

मुझे विश्वास नहीं है कि एक शून्य दृश्य को हटाने से ऐप को दुर्घटनाग्रस्त हो जाएगा। मुझे लगता है कि यह शून्य एडाप्टर हो सकता है। –