So erhalten Sie ein String-Array aus der Datei arrays.xml

116

Ich versuche nur, eine Liste aus einem Array anzuzeigen, das ich in meinem habe arrays.xml. Wenn ich versuche, es im Emulator auszuführen, wird eine Force Close-Nachricht angezeigt.

Wenn ich das Array in der Java-Datei definiere

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

es funktioniert, aber wenn ich benutze

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

es funktioniert nicht.

Hier ist meine Java-Datei:

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


}

Hier ist meine arrays.xmlDatei

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

Antworten:

212

Sie können Ihr testArrayFeld auf diese Weise nicht initialisieren , da die Anwendungsressourcen noch nicht bereit sind.

Ändern Sie einfach den Code in:

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
quelle
Ich würde auch hinzufügen, dass "-" in Arrays Namen nicht erlaubt sind. Eclipse warnte mich nicht, die XML-Datei schien in Ordnung zu sein, und es dauerte eine Weile, bis mir klar wurde, dass dies das Problem verursachte. "_" funktioniert gut.
Lesik2008
30

Ihre array.xml ist nicht richtig. ändere es so, dass es dir gefällt

Hier ist die Datei 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
quelle
Würde nicht lösen, dass dieses Feld initialisiert wird, bevor der Aktivitätskontext und die Ressourcen initialisiert werden.
Lubos Horacek
2

Ihr XML ist nicht ganz klar, aber Arrays XML kann dazu führen, dass das Schließen erzwungen wird, wenn Sie ihnen Zahlen geben und / oder Leerzeichen in ihre Definition einfügen.

Stellen Sie sicher, dass sie als No Leading oder Trailing Whitespace definiert sind

HaMMeReD
quelle