如何从 arrays.xml 文件中获取字符串数组

Posted

技术标签:

【中文标题】如何从 arrays.xml 文件中获取字符串数组【英文标题】:How to get String Array from arrays.xml file 【发布时间】:2011-01-28 01:55:52 【问题描述】:

我只是想从我的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>

【问题讨论】:

【参考方案1】:

您不能以这种方式初始化您的 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 文件似乎没问题,我花了一段时间才意识到这是导致问题的原因。 “_”工作正常。【参考方案2】:

您的 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上下文和资源初始化之前初始化的问题。【参考方案3】:

您的 XML 并不完全清楚,但如果您将数组 XML 设置为数字和/或在其定义中放置空格,则它们可能会导致强制关闭。

确保它们被定义为无前导或尾随空格

【讨论】:

【参考方案4】:

您也可以通过以下代码从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>

【讨论】:

以上是关于如何从 arrays.xml 文件中获取字符串数组的主要内容,如果未能解决你的问题,请参考以下文章

如何从文件中获取数据并替换Sudoku游戏中的预定义数组

如何从数组中的字符串数组中获取每个值

Android中通过数组资源文件xml与适配器两种方式给ListView列表视图设置数据源

如何从 JSON 数组中获取字符串数组? [关闭]

如何使用批处理脚本从文本文件中获取唯一字符串

如何从返回的 plist 数组中获取字符串