วิธีรับ String Array จากไฟล์ arrays.xml


116

ฉันแค่พยายามแสดงรายการจากอาร์เรย์ที่ฉันมีในarrays.xmlไฟล์. เมื่อฉันพยายามเรียกใช้ในโปรแกรมจำลองฉันได้รับข้อความบังคับปิด

ถ้าฉันกำหนดอาร์เรย์ในไฟล์ java

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

มันใช้งานได้ แต่เมื่อฉันใช้

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

มันไม่ทำงาน

นี่คือไฟล์ 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);
 }


}

นี่คือ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>

คำตอบ:


213

คุณไม่สามารถเริ่มต้นtestArrayฟิลด์ของคุณด้วยวิธีนี้เนื่องจากทรัพยากรของแอปพลิเคชันยังไม่พร้อม

เพียงแค่เปลี่ยนรหัสเป็น:

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

ฉันจะเพิ่มว่า "-" ไม่ได้รับอนุญาตในชื่ออาร์เรย์ Eclipse ไม่เตือนฉันไฟล์ xml ดูเหมือนจะไม่เป็นไรและฉันใช้เวลาสักพักกว่าจะรู้ว่านี่เป็นสาเหตุของปัญหา "_" ทำงานได้ดี
Lesik2008

30

array.xml ของคุณไม่ถูกต้อง เปลี่ยนเป็นแบบนี้

นี่คือไฟล์ 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>

จะไม่สามารถแก้ปัญหาได้ว่าฟิลด์นี้เริ่มต้นก่อนบริบทกิจกรรมและทรัพยากรจะเริ่มต้น
Lubos Horacek

2

XML ของคุณไม่ชัดเจน แต่อาร์เรย์ XML อาจทำให้เกิดแรงปิดหากคุณสร้างตัวเลขและ / หรือใส่ช่องว่างในคำจำกัดความ

ตรวจสอบให้แน่ใจว่าได้กำหนดไว้เช่น No Leading หรือ Trailing Whitespace

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.