2010-08-23 6 views
9

Ich bin ein ArrayAdapter Einstellung und ich erhalte den folgenden Fehler:Android - ArrayAdapter.createViewFromResource (int, Ansicht, Viewgroup, int) Zeile: 355 Nullpointer

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  

Mein symptomremedyActivity.java wie folgt aussieht:

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); 

und mein symptomremedy.xml Layout wie folgt aussieht:

<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> 

und menu_item.xml Layout sieht aus wie:

<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" 
/> 

ich etwas ähnliches in anderen Aktivitäten ohne Probleme gemacht habe, so kann ich nicht herausfinden, warum hier ein Problem gibt. Alle involvierten Felder sind nicht null, d. H. AbhilfeArray, etc. Jeder hat eine Idee was das Problem ist?

Antwort

9

Es stellte sich heraus, dass das Problem in der Art war, wie ich das Array für den ArrayAdapter erstellte. Zuvor war der Code, den ich hatte:

String remedyArray[] = new String[30]; 

Wenn ich den Code geändert:

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

alles funktionierte. Ich verstehe nicht ganz warum, aber es schien, dass das Initialisieren des Arrays mit Werten den Trick brachte. Ich denke, eine der Eindeutigkeiten von Java ist, dass wenn ein Array erstellt wird, die Einträge null enthalten, und ich denke, es waren diese Nullwerte, die das Problem verursacht haben.

+1

Ich hatte dieses Problem auch. Danke, dass du es hier gelöst hast! – Erika

+1

Ich hatte das gleiche Problem. Ich habe viel nach diesem gesucht, und fand dies nach zu viel Test auf Code ..... Sehr dankbar dafür. –

8

Die Nullpointer in

ArrayAdapter.createViewFromResource 

legt nahe, dass das Problem von

R.layout.menu_item 

kommt Wenn diese Datei unter/res/layout/vorhanden ist, überprüfen Sie, dass es

in R.java registriert ist

Verwenden Sie auch einen benutzerdefinierten ArrayAdapter? Wenn ja, aktualisieren Sie die Frage bitte mit dem Code.

Wenn Sie keinen benutzerdefinierten ArrayAdapter verwenden, versuchen Sie, der TextView in menu_item einen Bezeichner hinzuzufügen. Wenn Sie getView nicht überschreiben, wird Android versuchen, eine TextView in der resourceId (menu_item.xml) mit den Daten in AbhilfeList zu füllen. Ich habe noch nie getan, aber Sie können das Textview-id mithilfe dieser Konstruktor angeben müssen:

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

prüfen ArrayAdapter Bauer.

0

Mein Problem war, dass das benutzerdefinierte Artikellayout und das Layout des Dropdown-Elements nicht dieselbe ID für die Haupttextansicht verwendeten; im Grunde, weil ich ein benutzerdefiniertes Element erstellen wollte, aber das Standard-Dropdown-Element beibehalten.

Die ID in textViewResourceId muss für beide Ansichten identisch sein.

Das Erstellen eines benutzerdefinierten Dropdown-Elements mit derselben Textansichts-ID löste das Problem.

0

Es tut mir leid, dass ich diese Frage ausgegraben habe, aber ich bin heute auf das Problem gestoßen und habe verstanden, warum das passiert.

Wenn Sie Speicherplatz für ein neu erstelltes Array (z. B. String[] array = new String[80]) statisch reservieren, müssen Sie sicherstellen, dass Sie alle 81 Stellen des Arrays ausfüllen. Denn wenn Sie dies nicht tun, werden sie mit null Werten gefüllt, was die NullPointerException verursacht.

Wenn Sie das Array mit leeren Strings gefüllt haben, haben Sie im Grunde einen Workaround gefunden.

Verwandte Themen