Cara mendapatkan String Array dari file arrays.xml

116

Saya hanya mencoba menampilkan daftar dari array yang saya miliki di file arrays.xml. Saat saya mencoba menjalankannya di emulator, saya mendapatkan pesan tutup paksa.

Jika saya mendefinisikan array di file java

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

itu berhasil, tapi saat saya gunakan

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

itu tidak berhasil.

Ini file Java saya:

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


}

Ini arrays.xmlfile saya

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

Jawaban:

213

Anda tidak dapat menginisialisasi testArray bidang dengan cara ini, karena sumber daya aplikasi masih belum siap.

Ubah saja kodenya menjadi:

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
sumber
Saya juga akan menambahkan bahwa "-" tidak diperbolehkan dalam nama array. Eclipse tidak memperingatkan saya, file xml tampak baik-baik saja, dan saya butuh beberapa saat untuk menyadari bahwa ini yang menyebabkan masalah. "_" bekerja dengan baik.
Lesik2008
30

Array.xml Anda salah. ubah menjadi seperti ini

Berikut adalah file 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
sumber
Tidak akan menyelesaikan bahwa bidang ini diinisialisasi sebelum konteks dan sumber daya Aktivitas diinisialisasi.
Lubos Horacek
2

XML Anda tidak sepenuhnya jelas, tetapi XML array dapat menyebabkan penutupan paksa jika Anda menjadikannya angka, dan / atau memberi spasi kosong dalam definisinya.

Pastikan mereka didefinisikan seperti No Leading atau Trailing Whitespace

HaMMeReD
sumber