Comment obtenir un tableau de chaînes à partir du fichier arrays.xml


116

J'essaie simplement d'afficher une liste à partir d'un tableau que j'ai dans mon arrays.xml. Lorsque j'essaye de l'exécuter dans l'émulateur, j'obtiens un message de fermeture forcée.

Si je définis le tableau dans le fichier java

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

ça marche, mais quand j'utilise

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

ça ne marche pas.

Voici mon fichier 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);
 }


}

Voici mon arrays.xmldossier

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

Réponses:


213

Vous ne pouvez pas initialiser votre testArraychamp de cette façon, car les ressources de l'application ne sont toujours pas prêtes.

Changez simplement le code en:

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

J'ajouterais également que "-" ne sont pas autorisés dans les noms de tableaux. Eclipse ne m'a pas prévenu, le fichier xml semblait correct, et il m'a fallu un certain temps pour réaliser que cela causait le problème. "_" fonctionne bien.
Lesik2008

30

Votre array.xml n'est pas correct. changez-le pour aimer ça

Voici le fichier 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>

Ne résoudrait pas que ce champ est initialisé avant que le contexte d'activité et les ressources ne soient initialisés.
Lubos Horacek

2

Votre XML n'est pas entièrement clair, mais les tableaux XML peuvent provoquer des fermetures forcées si vous leur faites des nombres, et / ou mettez un espace blanc dans leur définition.

Assurez-vous qu'ils sont définis comme Aucun espace blanc de début ou de fin

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.