2010-08-23 14 views
9

मैं एक ArrayAdapter सेट कर रहा हूं और मैं निम्नलिखित त्रुटि मिलती है:एंड्रॉयड - ArrayAdapter.createViewFromResource (पूर्णांक, देखें, ViewGroup, पूर्णांक) लाइन: 355 NullPointerException

:

Thread [<1> main] (Suspended (exception NullPointerException)) 
ArrayAdapter.createViewFromResource(int, View, ViewGroup, int) line: 355  
ArrayAdapter.getView(int, View, ViewGroup) line: 323  
ListView(AbsListView).obtainView(int, boolean[]) line: 1294 
ListView.measureHeightOfChildren(int, int, int, int, int) line: 1198  

मेरे symptomremedyActivity.java तरह लग रहा है

setContentView(R.layout.symptomremedy); 
    ListView remedyList = (ListView) findViewById(R.id.ListView_SymptomRemedy); 
    remedyList.setTextFilterEnabled(true); 
    ArrayAdapter<String> adapt = new ArrayAdapter<String>(this, R.layout.menu_item, remedyArray); 
    remedyList.setAdapter(adapt); 

और मेरे symptomremedy.xml लेआउट की तरह दिखता है:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
> 
<Button 
android:id="@+id/Button_BACK" 
android:layout_width="wrap_content" 
android:layout_height="@dimen/menu_button_height" 
android:layout_alignTop="@+id/Button_BACK" 
android:layout_below="@+id/ImageView_MenuHeader" 
android:textSize="@dimen/menu_button_text_size" 
android:text="@string/back"></Button> 

<ListView 
     android:layout_height="wrap_content" 
     android:id="@+id/ListView_SymptomRemedy" 
     android:layout_width="fill_parent" 
     android:background="@color/menu_white" 
     android:divider="@drawable/straight_divider" 
     android:listSelector="@drawable/textured" 
     android:layout_alignParentTop="true"></ListView> 

</LinearLayout> 

और menu_item.xml लेआउट ऐसा लगता है कि:

<TextView 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:textSize="@dimen/menu_item_size" 
android:text="test string" 
android:textColor="@color/menu_black" 
android:layout_height="fill_parent" 
/> 

मैं कोई समस्या नहीं के साथ अन्य गतिविधियों में कुछ इसी तरह किया है, तो मैं समझ नहीं क्यों वहाँ एक समस्या यहाँ है। शामिल सभी फ़ील्ड गैर-शून्य हैं, यानी उपायअरे, इत्यादि। किसी को भी कोई विचार है कि समस्या क्या है?

उत्तर

9

समस्या को हल करता है जिस तरह से मैं ArrayAdapter के लिए सरणी बना रहा था। इससे पहले कोड रहा था:

String remedyArray[] = new String[30]; 
    for (int i = 0; i< 30; i++){ 
      remedyArray[i] = ""; 
    } 

सब कुछ काम किया:

String remedyArray[] = new String[30]; 

जब मैं करने के लिए कोड बदल दिया है। मैं पूरी तरह समझ नहीं पा रहा हूं, लेकिन ऐसा प्रतीत होता है कि मूल्यों के साथ सरणी को शुरू करने से चाल चल रही थी। मुझे लगता है कि जावा की विशिष्टता में से एक यह है कि जब कोई सरणी बनाई जाती है, तो प्रविष्टियों में शून्य होती है, और मुझे लगता है कि यह उन शून्य मानों से था जो समस्या पैदा कर रहे थे।

+1

मुझे यह समस्या भी थी। यहां जोर से इसे हल करने के लिए धन्यवाद! – Erika

+1

मुझे एक ही समस्या का सामना करना पड़ रहा था। मैंने इसके लिए बहुत कुछ खोजा, और कोड पर बहुत अधिक परीक्षण के बाद यह पाया ..... इसके लिए बहुत बहुत आभारी। –

8

ArrayAdapter.createViewFromResource 

में NullPointerException पता चलता है कि समस्या से

R.layout.menu_item 

आ रहा है इस फाइल/res/लेआउट/के तहत मौजूद है, तो जांच कर लें कि यह R.java में

पंजीकृत है

इसके अलावा, क्या आप एक कस्टम ArrayAdapter का उपयोग कर रहे हैं? यदि ऐसा है, तो कोड के साथ प्रश्न अद्यतन करें।

यदि आप कस्टम ऐरेएडाप्टर का उपयोग नहीं कर रहे हैं, तो menu_item में TextView में पहचानकर्ता जोड़ने का प्रयास करें। यदि आप GetView को ओवरराइड नहीं कर रहे हैं, तो एंड्रॉइड संसाधन आईडी (menu_item.xml) में टेक्स्ट व्यू को उपचार सूची में डेटा के साथ भरने का प्रयास करेगा। मैंने कभी नहीं यह कर दिया है, लेकिन आप इस निर्माता का उपयोग करके TextView आईडी निर्दिष्ट करने की आवश्यकता हो सकता है:

ArrayAdapter(Context context, int resource, int textViewResourceId, List<T> objects) 

चेक ArrayAdapter कंस्ट्रक्टर्स।

0

मेरी समस्या यह थी कि कस्टम आइटम लेआउट और ड्रॉपडाउन आइटम लेआउट मुख्य टेक्स्टव्यू के लिए एक ही आईडी का उपयोग नहीं कर रहे थे; मूल रूप से क्योंकि मैं एक कस्टम आइटम बनाना चाहता था, लेकिन डिफ़ॉल्ट ड्रॉपडाउन आइटम को बनाए रखना था।

टेक्स्ट ViewResourceId में आईडी दोनों विचारों के लिए समान होना चाहिए।

ArrayAdapter(Context context, int resource, int textViewResourceId, List<T> objects) 

उसी टेक्स्टव्यू आईडी के साथ एक कस्टम ड्रॉपडाउन आइटम बनाना समस्या हल हो गया।

0

इस प्रश्न को खोदने के लिए खेद है, लेकिन मैं आज इस मुद्दे पर आया और मुझे समझ में आया कि ऐसा क्यों होता है।

यदि आप स्थिर रूप से नव निर्मित सरणी (यानी String[] array = new String[80]) के लिए कुछ स्थान आवंटित करते हैं तो आपको यह सुनिश्चित करना होगा कि आप सरणी के सभी 81 स्थानों को भरें। क्योंकि यदि आप नहीं करते हैं तो वे null मानों से भरे जाएंगे जिससे NullPointerException हो सकता है।

जब आप खाली तारों के साथ सरणी भरते हैं तो आपको मूल रूप से इस पर एक कार्य मिल जाता है।

संबंधित मुद्दे