从arrays.xml文件中获取字符串数组的方法

126

我只是想从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>
4个回答

231

你不能用这种方式初始化你的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

31

你的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>

不会解决这个字段在 Activity 上下文和资源初始化之前被初始化的问题。 - Lubos Horacek

2
您可以使用以下代码将XML中的字符串数组作为ArrayList获取:

XML数组:

    <string-array name="testArray">  
        <item>first</item>  
        <item>second</item>  
        <item>third</item>  
        <item>fourth</item>  
        <item>fifth</item>  
   </string-array>

Kotlin 代码:

val stringArray: ArrayList<String> =  resources.getStringArray(R.array.testArray).toList() as ArrayList<String>

2

您的XML不是完全清晰的,但如果将数组XML变成数字并/或在其定义中放入空格,则可能会导致强制关闭。

请确保它们的定义没有前导或尾随空格。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接