Cách lấy Mảng chuỗi từ tệp array.xml


116

Tôi chỉ đang cố gắng hiển thị danh sách từ một mảng mà tôi có trong đó arrays.xml. Khi tôi cố gắng chạy nó trong trình giả lập, tôi nhận được thông báo buộc đóng.

Nếu tôi xác định mảng trong tệp java

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

nó hoạt động, nhưng khi tôi sử dụng

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

nó không hoạt động.

Đây là tệp Java của tôi:

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


}

Đây là arrays.xmltệp của tôi

<?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>

Câu trả lời:


213

Bạn không thể khởi tạo testArray trường theo cách này vì tài nguyên ứng dụng vẫn chưa sẵn sàng.

Chỉ cần thay đổi mã thành:

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

Tôi cũng sẽ thêm rằng "-" không được phép trong tên mảng. Eclipse đã không cảnh báo tôi, tệp xml có vẻ ổn và tôi phải mất một lúc để nhận ra rằng điều này đang gây ra sự cố. "_" hoạt động tốt.
Lesik2008

30

Array.xml của bạn không đúng. thay đổi nó thành như thế này

Đây là tệp 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>

Sẽ không giải quyết được rằng trường này được khởi tạo trước khi ngữ cảnh Hoạt động và tài nguyên được khởi tạo.
Lubos Horacek

2

XML của bạn không hoàn toàn rõ ràng, nhưng các mảng XML có thể gây ra các lệnh đóng nếu bạn đặt chúng thành số và / hoặc đặt khoảng trắng trong định nghĩa của chúng.

Đảm bảo rằng chúng được xác định như Không có khoảng trắng ở đầu hoặc ở cuối

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.