2010-08-23 10 views
9

Sto installando un ArrayAdapter ed ottengo il seguente errore:Android - ArrayAdapter.createViewFromResource (int, Vista, ViewGroup, int) Linea: 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  

mio symptomremedyActivity.java assomiglia:

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

e il mio layout symptomremedy.xml assomiglia:

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

e il layout menu_item.xml si presenta come:

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

che ho fatto qualcosa di simile in altre attività senza problemi, quindi non riesco a capire il motivo per cui v'è un problema qui. Tutti i campi coinvolti sono non nulli, ad esempio rimedioArray, ecc. Qualcuno ha idea di quale sia il problema?

risposta

9

Si è verificato un problema nel modo in cui stavo creando l'array per ArrayAdapter. In precedenza il codice che ho avuto è stato:

String remedyArray[] = new String[30]; 

Quando ho cambiato il codice per:

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

tutto ha funzionato. Non capisco completamente perché, ma è apparso che inizializzare la matrice con i valori ha fatto il trucco. Immagino che una delle unicità di Java sia che quando viene creato un array, le voci contengono null, e penso che siano stati quei valori nulli a causare il problema.

+1

Ho avuto anche questo problema. Grazie per aver risolto a voce alta qui! – Erika

+1

Stavo affrontando lo stesso problema. Ho cercato molto per questo, e ho trovato questo dopo troppa prova sul codice ..... Molto grato per questo. –

8

Il NullPointerException in

ArrayAdapter.createViewFromResource 

suggerisce che il problema proviene da

R.layout.menu_item 

Se questo file esiste sotto/res/layout /, verificare che sia registrato in R.java

Inoltre, stai usando un ArrayAdapter personalizzato? In tal caso, aggiorna la domanda con il codice.

Se non si utilizza un ArrayAdapter personalizzato, provare ad aggiungere un identificatore a TextView in menu_item. Se non si esegue l'override di getView, Android tenterà di riempire un TextView in resourceId (menu_item.xml) con i dati in rimedioLista. Non ho mai fatto questo, ma potrebbe essere necessario specificare il TextView id utilizzando questo costruttore:

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

Controllare ArrayAdapter costruttori.

0

Il mio problema era che il layout dell'elemento personalizzato e il layout dell'elenco a discesa non utilizzavano lo stesso ID per la vista testo principale; fondamentalmente perché volevo creare un oggetto personalizzato, ma mantenere l'elemento di discesa predefinito.

l'ID in textViewResourceId deve essere uguale per entrambe le viste.

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

La creazione di un elemento di menu a discesa personalizzato con lo stesso ID di visualizzazione testo ha risolto il problema.

0

Ci scusiamo per aver trovato questa domanda, ma oggi ho trovato il problema e ho capito perché questo accade.

Se si assegna un po 'di spazio per un array appena creato (ad esempio String[] array = new String[80]) è necessario assicurarsi di riempire tutti gli 81 punti dell'array. Perché se non lo fanno, saranno riempiti con i valori null causando così il NullPointerException.

Quando hai riempito l'array con stringhe vuote hai praticamente trovato un modo per ovviare a questo problema.

Problemi correlati