Cómo obtener String Array del archivo arrays.xml

116

Solo estoy tratando de mostrar una lista de una matriz que tengo en mi arrays.xml. Cuando intento ejecutarlo en el emulador, aparece un mensaje de cierre forzado.

Si defino la matriz en el archivo java

String[] testArray = new String[] {"one","two","three","etc"};

funciona, pero cuando uso

String[] testArray = getResources().getStringArray(R.array.testArray);

no funciona.

Aquí está mi archivo Java:

package com.xtensivearts.episode.seven;

import android.app.ListActivity;
import android.os.Bundle;
import android.widget.ArrayAdapter;

public class Episode7 extends ListActivity {
 String[] testArray = getResources().getStringArray(R.array.testArray);

 /** Called when the activity is first created. */
 @Override
 protected void onCreate(Bundle savedInstanceState) {

  super.onCreate(savedInstanceState);

  // Create an ArrayAdapter that will contain all list items
  ArrayAdapter<String> adapter;

  /* Assign the name array to that adapter and 
     also choose a simple layout for the list items */ 
  adapter = new ArrayAdapter<String>(
    this,
    android.R.layout.simple_list_item_1,
    testArray);

  // Assign the adapter to this ListActivity
  setListAdapter(adapter);
 }


}

Aqui esta mi arrays.xmlarchivo

<?xml version="1.0" encoding="utf-8"?>  
<resources>  
  <array name="testArray">  
    <item>first</item>  
    <item>second</item>  
    <item>third</item>  
    <item>fourth</item>  
    <item>fifth</item>  
  </array>
</resources>
Soren
fuente

Respuestas:

213

No puede inicializar su testArraycampo de esta manera, porque los recursos de la aplicación aún no están listos.

Simplemente cambie el código a:

package com.xtensivearts.episode.seven;

import android.app.ListActivity;
import android.os.Bundle;
import android.widget.ArrayAdapter;

public class Episode7 extends ListActivity {
    String[] mTestArray;

    /** Called when the activity is first created. */
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // Create an ArrayAdapter that will contain all list items
        ArrayAdapter<String> adapter;

        mTestArray = getResources().getStringArray(R.array.testArray);    

        /* Assign the name array to that adapter and 
        also choose a simple layout for the list items */ 
        adapter = new ArrayAdapter<String>(
            this,
            android.R.layout.simple_list_item_1,
            mTestArray);

        // Assign the adapter to this ListActivity
        setListAdapter(adapter);
    }
}
Dimitar Dimitrov
fuente
También agregaría que "-" no está permitido en los nombres de las matrices. Eclipse no me advirtió, el archivo xml parecía estar bien y me tomó un tiempo darme cuenta de que esto estaba causando el problema. "_" trabaja bien.
Lesik2008
30

Su array.xml no es correcto. cámbialo para así

Aquí está el archivo array.xml

<?xml version="1.0" encoding="utf-8"?>  
<resources>  
    <string-array name="testArray">  
        <item>first</item>  
        <item>second</item>  
        <item>third</item>  
        <item>fourth</item>  
        <item>fifth</item>  
   </string-array>
</resources>
Muhammad Aamir Ali
fuente
No resolvería que este campo se inicialice antes de que se inicialicen el contexto de actividad y los recursos.
Lubos Horacek
2

Su XML no es del todo claro, pero las matrices XML pueden causar cierres forzados si los convierte en números y / o coloca espacios en blanco en su definición.

Asegúrese de que estén definidos como Sin espacios en blanco iniciales o finales

HammeReD
fuente