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>

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

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>

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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.