Android字符串可以从代码中运行,但会从string.xml中崩溃

时间:2012-08-31 13:23:50

标签: android listview arrays

我有以下代码:

String personalinfos[] = {"Age", "Gender", "Height", "Weight"};
@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.myLayout);

setListAdapter(new ArrayAdapter<String>(Screening.this, android.R.layout.simple_list_item_1, personalinfos));

它有效,它确实有效。但是,由于我需要进行国际化/本地化项目,我将其移至strings.xml,因此我将其添加到strings.xml

<string-array name="my_keys">
    <item>Age</item>
    <item>Gender</item>
    <item>Height</item>
    <item>Weight</item>
</string-array>

并尝试将代码更改为:

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

假设我会得到相同的结果,但我没有,我的应用程序崩溃了。

这里有问题:

从strings.xml读取字符串数组的正确方法是什么?

我不明白为什么会崩溃。

5 个答案:

答案 0 :(得分:1)

试试这样 -

String personalinfos[];
@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.myLayout);

    personalinfos = getResources().getStringArray(R.array.my_keys);

setListAdapter(new ArrayAdapter<String>(Screening.this, android.R.layout.simple_list_item_1, personalinfos));

阅读相关内容 - Help in getting String Array from arrays.xml file

答案 1 :(得分:0)

你试过了吗?

Resources res = getResources();
String[] personalinfos = res.getStringArray(R.array.my_keys);  // no []

此处的文档:http://developer.android.com/guide/topics/resources/string-resource.html

答案 2 :(得分:0)

尝试在strings.xml中逐个定义字符串,然后在数组中定义项目,如:

<item>@string/string_identifier</item>

有效吗?

有关字符串和字符串数组的更多信息here

答案 3 :(得分:0)

1)发布LOGCAT。这就是崩溃的原因。

2)如何使用数组创建array.xml文件并直接从xml调用它们?

因此,请创建您的array.xml并将其定义为:

<resources>
    <string-array name="array">
        <item>A</item>
        <item>B</item>
    </string-array>
</resources>

然后在你的布局中使用entries属性:

<ListView
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:entries="@array/array"/>

答案 4 :(得分:0)

您不能在任何活动/片段生命周期方法之外使用getResources()。当您尝试在班级中访问它们时,资源尚未准备就绪。为此,您可以在任意位置正确定义变量,并使用onCreate()onCreateView()方法对其进行初始化。有关简单示例,请参阅Praveenkumar answer