Переменные Android getResources().getStringArray()

#android #string #variables

#Android #строка #переменные

Вопрос:

У меня есть XML-файл, где есть строки и массивы строк. У меня есть класс, в котором я нажимаю на listitem, а в другом классе я перечисляю другие элементы. В XML есть строка, имена которой являются измененными именами выбранных элементов, а значения — именем строковых массивов. Я нашел решение, как добавить переменную в getResources (9.getStringArray() но это не работает. Программа запускается, но когда я нажимаю на любой из элементов списка, моя активность просто перестает работать. Мой файл класса:

 String artistpicked = extras.getString("artist");
String[] firstW = artistpicked.split(" ");
firstW[0] = firstW[0].trim();
String albumSearch = firstW[0]   "_code";
int getRes = getResources().getIdentifier(albumSearch, "string", getPackageName());
String setRes = String.valueOf(getRes);
int getRes2 = getResources().getIdentifier(setRes, "array", getPackageName());
String[] albums = getResources().getStringArray(getRes2);
setListAdapter(new ArrayAdapter<String>(this, R.layout.list_item, albums));
TextView t = (TextView) findViewById(R.id.albumName);
t.setText(setRes);
  

TextView предназначен для проверки переменных. Поиск альбома выдает «modifiedartistpicked_code», это хорошо. getRes выдает значение из xml («something_array»), setRes выдает его фактический идентификационный номер (который требуется для getStringArray). getRes2 выдает то же самое, что и getRes, это просто для проверки того, что все работает нормально. Когда я закомментирую следующие две строки, строку albums[] и setListAdapter, программа работает, но она не выводит список элементов.

XML-файл:

 <?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="artists_array">
        <item>code1 example</item>
        <item>code2 example</item>
    </string-array>
    <string-array name="code1_array">
        <item>item1</item>
        <item>item2</item>
        <item>item3</item>
    </string-array>
    <string-array name="code2_array">
        <item>item1</item>
        <item>item2</item>
        <item>item3</item>
    </string-array>
    <string name="code1_code">code1_array</string>
    <string name="code2_code">code2_array</string>
</resources>
  

Надеюсь, мне удалось написать, что я хотел бы сделать, и в чем проблема 🙂

Обновить:

@Marc Bernstein: Потому что я не знаю, что это code1_array. Сначала я сделал много, если и когда выбранный элемент был x, затем я прочитал R.array.x_array и т.д…

Но я понял, в чем была проблема, в названии строк в xml были заглавные буквы. Вот почему я ненавижу xml, проблема всегда есть 🙂 Этот xml был просто примером, оригинал намного больше, поэтому никто не смог помочь. В следующий раз я буду гораздо осторожнее.

А также я сделал это более простым, потому что вы правы, это было слишком сложно.

Комментарии:

1. Я должен сказать, прочитав это несколько раз, я действительно понятия не имею, что вы пытаетесь сделать. Чтобы помочь разобраться в проблеме, вы должны отладить свое приложение, показать окно LogCat в Eclipse, и когда приложение принудительно закроется, вы должны увидеть красный блок текста с подробным описанием возникшего исключения, вызвавшего принудительное закрытие. Найдите в этом блоке первую ссылку на один из ваших файлов .java, за которой следует a :<x> , где <x> — некоторое число, показывающее строку, в которой произошло исключение.

Ответ №1:

Виновник, скорее всего,

 String[] albums = getResources().getStringArray(getRes2);
  

Вместо того, чтобы делать

 int getRes2 = getResources().getIdentifier(setRes, "array", getPackageName());
String[] albums = getResources().getStringArray(getRes2);
  

Почему бы просто не использовать

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

?

В любом случае, из того, что вы опубликовали, я не думаю, что идентификатор «массива» действительно существует в вашем strings.xml файл. Я вижу code1_array amp; code2_array.

Ответ №2:

Это потому, что он пытается динамически определить массив, который он хочет использовать. Идентификатор из String[] albums = getResources().getStringArray( R.array.code1_array ); задается, скажем, при вводе пользователем, в некотором окне spinner / edittext. Это вместо использования базы данных, просто используя некоторые строки из XML-файла.

Комментарии:

1. Спасибо, но в обновлении есть то, в чем была проблема. Имена в xml были просто примерами (это было проще и короче), а в реальном xml была заглавная буква, что является большой проблемой в xml 🙂