2010-03-16 5 views
86

J'essaie juste d'afficher une liste d'un tableau que j'ai dans mon fichier arrays.xml. Lorsque j'essaie de l'exécuter dans l'émulateur, j'obtiens un message de fermeture forcée.Aide pour obtenir String Array à partir du fichier arrays.xml

Si je définissiez le tableau dans le fichier java

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

cela fonctionne, mais quand je l'utilise

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

cela ne fonctionne 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 fichier arrays.xml

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

171

Vous ne pouvez pas initialiser votre champ testArray cette façon, parce que les ressources d'application ne sont toujours pas prêt.

il suffit de changer le code:

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

qui l'a fait! Merci beaucoup pour votre aide et votre explication. Étant un débutant, j'ai besoin des explications! – Soren

+0

Sauvé ma journée! Merci! : D – borislemke

+0

J'ajouterais aussi que "-" n'est pas autorisé dans les noms de tableaux. Eclipse ne m'a pas prévenu, le fichier xml me semblait correct, et il m'a fallu du temps pour me rendre compte que c'était à l'origine du problème. "_" fonctionne bien. – Lesik2008

2

Votre XML est pas entièrement XML clair, mais les tableaux peuvent causer la force ferme si vous les faites des chiffres et/ou mettre un espace blanc dans leur définition.

Assurez-vous qu'ils sont définis comme non avant ou arrière Whitespace

24

Votre array.xml est pas juste. changer à aimer

Voici 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> 
+0

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

Questions connexes