Доступ к определенному XML-массиву строк - PullRequest
0 голосов
/ 13 октября 2011

Я новичок в написании приложений для Android, у меня проблема с использованием getResources().getStringArray().

Я создаю string-array ресурс из Eclipse (или вручную) в файле с именем res.values.strings.xml , который выглядит следующим образом:

<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="BlueStartCommands">     
    <item> NO_CMD</item>        
    <item> LOCK_CMD</item>
    <item> UNLOCK_CMD</item>
    <item> TRUNK_RELEASE_CMD</item>
    <item> PANIC_CMD</item>
    <item> REMOTE_START_CMD</item>
    <item> REQ_START_MONITOR_CMD</item>
    <item> REQ_PASSIVE_LOCK_SETTINGS_CMD</item>
    <item> REQ_STOP_MONITOR_CMD</item>
    <item> PING_CMD</item>             
</string-array>
<string-array name="CMD">
    <item>AAAAAA</item>
    <item>BBBBBB</item>
</string-array>
</resources>

Затем я пытаюсь получить доступ к массиву в моем Activity. Вылетает:

public class TestApp2Activity extends Activity {
    static boolean firstWrite=true;
    TextView DebugWindow;
        ViewFlipper flipper;
    Button FlipBtn; 
    Button SwitchBtn;
    EditText MessageBox;
    Spinner PredefinedMessages;
    OnItemSelectedListener PredefinedMessageSelected;
    int SelectedPredefinedMessage=0;
    String[] MyPredefinedCommands = {"fsd", "fdg", "sdf", "saf", "w", "v", "u", "t", "z", "y", "x"};    
    String[] cmd = getResources().getStringArray(R.array.CMD);
    @SuppressWarnings("unchecked")
    @Override
    public void onCreate(Bundle icicle) {               
    super.onCreate(icicle);
    setContentView(R.layout.main);      
    flipper=(ViewFlipper)findViewById(R.id.details);
    FlipBtn=(Button)findViewById(R.id.Button01);
    SwitchBtn=(Button)findViewById(R.id.Button04);
    DebugWindow=(TextView)findViewById(R.id.textView1);
    MessageBox=(EditText)findViewById(R.id.editText2);
    PredefinedMessages=(Spinner)findViewById(R.id.spinner1);
    PredefinedMessages.setPrompt("Please enter a predefined command");
    @SuppressWarnings("rawtypes")
    ArrayAdapter adapter = ArrayAdapter.createFromResource( this, R.array.BlueStartCommands , android.R.layout.simple_spinner_item);        
    PredefinedMessages.setAdapter(adapter);                 

    PredefinedMessages.setOnItemSelectedListener(new ListView.OnItemSelectedListener()
    {
        @Override
        public void onItemSelected(AdapterView<?> a, View v, int i, long l) {
            try {
                // Remembers the selected Index
                SelectedPredefinedMessage = i;                  
                String s = MyPredefinedCommands[i];
                System.out.print(s);
                MessageBox.setText(cmd[i]);
            }
            catch(Exception e) {
                System.out.println("Nay, cannot get the selected index");
            }
        }

        @Override
        public void onNothingSelected(AdapterView<?> arg0) {
            // TODO Auto-generated method stub              
        }
    });

    }

Однако, когда я использую код, созданный array-string cmd , это работает! Почему это так?

Ответы [ 2 ]

3 голосов
/ 13 октября 2011

Мне кажется, проблема в том, что вы пытаетесь получить свой массив до вызова onCreate() (вы назначаете его в своем глобальном объявлении).
Попробуйте String[] cmd; в классе, где вы сейчас его объявляете,
и cmd = getResources().getStringArray(R.array.CMD); в функции onCreate ().

0 голосов
/ 13 октября 2011

Я определил свои массивы в res / values ​​/ arrays.xml и получил к ним доступ с помощью:

CharSequence[] monthArray = getResources().getStringArray(R.array.Month);
List<CharSequence> monthArrayList = Arrays.asList(monthArray);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...