array.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、2014年

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 2017

2

XMLは完全に明確ではありませんが、配列XMLは、数値にしたり、定義に空白を入れたりすると強制終了を引き起こす可能性があります。

先頭または末尾に空白がないように定義されていることを確認してください

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.