Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
androbv
0 / 0 / 0
Регистрация: 16.01.2017
Сообщений: 30
1

Обычный стринг, как путь к значениям массива, как сделать?

19.04.2017, 11:45. Просмотров 978. Ответов 21
Метки нет (Все метки)

Привет всем.

Хотел вытащить массивы, их очень много, и каждый прописывать в коде через конструкцию getResources().getStringArray(R.array....) будет муторно и некрасиво. Поэтому возник вопрос, как сделать так, чтобы String[] принял значение обычного стринга, как путь, или есть ли какой-либо подходящий конвертер типов, что-то я не нашел ни одного подходящего. Даже пробовал конвертер типов Integer.valueOf(), т.к. спрашивает int, и с виду компилятор не ругается, но приложение потом все равно вылетает, в логах написано, что типы несовместимы, но это, конечно, следовало ожидать.

Для примера, как я пробовал:

Java
1
2
3
4
5
6
7
8
String str;
String[] arrStr;
  
(ля-ля-ля)
 
str = "R.array.data_" + 1;
 
arrStr = getResources().getStringArray(str);
Как же сделать так, чтобы String[] принял значение обычного стринга, как путь? Может есть подходящий конвертер, я искал, так и не нашел.
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.04.2017, 11:45
Ответы с готовыми решениями:

Как сделать преобразование массива чаров в стринг
смотрите я хочу сделать прогу, которая типо подбирает пароль. Вот код: ...

системный стринг и обычный.
Здравствуйте.. такая проблема: из текстбокса получаю системный стринг..его нужно преобразовать в...

Как создать массив стринг на основе массива дат
Есть массив дат: при вызове "print(type(date))" показывает: "<class 'datetime.date'>" Теперь...

Во всплывающей подсказке код читается как обычный текст. Как сделать чтобы код считывался ?
Есть у меня на сайте всплывающая подсказка, реализована на чистом CSS с помощью библиотеки (код...

Из массива стринг в двумерный массив стринг
У меня есть массив строк, в каждой строки записаны слова через пробел. Мне нужно из этого массива...

21
Pablito
2829 / 2248 / 759
Регистрация: 12.05.2014
Сообщений: 7,851
Завершенные тесты: 1
19.04.2017, 11:51 2
"много" массивов это сколько?
0
androbv
0 / 0 / 0
Регистрация: 16.01.2017
Сообщений: 30
19.04.2017, 12:41  [ТС] 3
Около 30
0
Pablito
2829 / 2248 / 759
Регистрация: 12.05.2014
Сообщений: 7,851
Завершенные тесты: 1
19.04.2017, 12:54 4
а куда эти 30 массивов будут сохраняться?
ну в смысле - читаем читаем читаем все 30, а что с ними происходит? все пишется в 2-мерный стринговый массив или куда?

просто вариантов как поступить может быть несколько
1
androbv
0 / 0 / 0
Регистрация: 16.01.2017
Сообщений: 30
19.04.2017, 13:03  [ТС] 5
Мне просто надо их считать с ресурса arrays и вывести в активити. Т.е. при тапе на пункт списка, в зависимости какой пункт выбран, должен загружаться определённый массив.

Добавлено через 2 минуты
Т. Е. Массив должен загрузиться в списки.
0
demixdn
310 / 255 / 79
Регистрация: 31.10.2016
Сообщений: 619
19.04.2017, 13:05 6
Лучший ответ Сообщение было отмечено androbv как решение

Решение

Цитата Сообщение от androbv Посмотреть сообщение
getResources().getStringArray(str);
туда нужно передавать id ресурса. id ресурса из стринга получается через getResources().getIdentifier(тут параметры).
в вашем случае примерно так
Java
1
2
3
String str = "R.array.data_" + 1;
int arrayId = getResources().getIdentifier(str, "array", getPackageName());
String[] strArray = getResources().getStringArray(arrayId);
код не проверял но идея такая.

еще вариант, просто хранить массив ссылок, и вытягивать в нужном месте нужный массив.
Java
1
2
int[] arrayIds = new int[]{R.array.data_0, R.array.data_1, R.array.data_2};
        String[] strArray = getResources().getStringArray(arrayIds[0]);
1
androbv
0 / 0 / 0
Регистрация: 16.01.2017
Сообщений: 30
19.04.2017, 13:06  [ТС] 7
Если вручную прописывать, все работает, но это много текста в коде будет, я хотел циклом пройтись, засунув в обычный стринг путь к массиву и просто добавляя номер массива.
0
ExFau$t
732 / 605 / 149
Регистрация: 08.05.2012
Сообщений: 2,941
19.04.2017, 13:11 8
А зачем подгружать все массивы, если тап будет только по одному итему или вообще не состоится?
1
androbv
0 / 0 / 0
Регистрация: 16.01.2017
Сообщений: 30
19.04.2017, 13:13  [ТС] 9
Вчера тоже думал над identifire, но не знал, какие параметры нужны для него. Спасибо, посмотрю позже. Сейчас не дома.
Второй вариант тоже посмотрю. Спасибо большое за ответы.

Добавлено через 1 минуту
Нет, при тапе на пункт меню, массив должен будет загрузиться в списки.
0
ExFau$t
732 / 605 / 149
Регистрация: 08.05.2012
Сообщений: 2,941
19.04.2017, 13:23 10
Достаточно получить позицию тапа и загрузить только 1 массив.
0
androbv
0 / 0 / 0
Регистрация: 16.01.2017
Сообщений: 30
19.04.2017, 18:19  [ТС] 11
Цитата Сообщение от ExFau$t Посмотреть сообщение
Достаточно получить позицию тапа и загрузить только 1 массив.
Массив так и так будет какой-либо один загружаться, в зависимости от выбранного тапа.

Сначала будет проверка, какой номер позиции тапа пришел, далее с помощью цикла, полученный номер прибавляем к имени такого-то массива, чтобы его вытащить из ресурсов, и далее его отправляем в адаптер на вывод на экран. Сейчас буду пробовать getIdentifier по совету выше.
0
ExFau$t
732 / 605 / 149
Регистрация: 08.05.2012
Сообщений: 2,941
19.04.2017, 18:21 12
Это и подразумевалось в самом начале.
0
androbv
0 / 0 / 0
Регистрация: 16.01.2017
Сообщений: 30
19.04.2017, 18:29  [ТС] 13
Не успел отредактировать, так будет точнее:
Сначала будет проход циклом по пришедшему номеру позиции, и при удовлетворении условия, полученный номер прибавляем к имени такого-то массива, чтобы его вытащить из ресурсов, и далее его отправляем в адаптер на вывод на экран.

Добавлено через 4 минуты
Цитата Сообщение от ExFau$t Посмотреть сообщение
Это и подразумевалось в самом начале.
А как добраться до определенных массивов, чтобы не указывать их каждый вручную, вот попробую getIdentifier.
0
shavuz
114 / 120 / 26
Регистрация: 29.01.2014
Сообщений: 596
19.04.2017, 18:37 14
какой то кривой дизайн, почему бы не загрузить их все изначально в какой то обьект в арайЛист? в каком то дата менеджере? и адаптер именно этот лист со всеми массивами будет обрабатывать
1
Pablito
2829 / 2248 / 759
Регистрация: 12.05.2014
Сообщений: 7,851
Завершенные тесты: 1
19.04.2017, 18:40 15
второй вариант demixdn самое то

от себя я бы добавил что есть еще вариант хранить не массивы строк, а собрать каждый массив в отдельную строку с разделителями и доставать не массив, а строку и бить сплитом
1
androbv
0 / 0 / 0
Регистрация: 16.01.2017
Сообщений: 30
19.04.2017, 18:51  [ТС] 16
Цитата Сообщение от shavuz Посмотреть сообщение
какой то кривой дизайн, почему бы не загрузить их все изначально в какой то обьект в арайЛист? в каком то дата менеджере? и адаптер именно этот лист со всеми массивами будет обрабатывать
Цитата Сообщение от Паблито Посмотреть сообщение
от себя я бы добавил что есть еще вариант хранить не массивы строк, а собрать каждый массив в отдельную строку с разделителями и доставать не массив, а строку и бить сплитом
Друзья, спасибо вам. Если бы я еще знал, как это делается Я не профи, просто любитель, начал изучать андроид недавно, поэтому, все что мог сделать, это спросить, как чуть улучшить то, что было мне немного известно.

Добавлено через 4 минуты
Но в дальнейшем буду и эти варианты изучать и пробовать реализовывать.
0
ExFau$t
732 / 605 / 149
Регистрация: 08.05.2012
Сообщений: 2,941
19.04.2017, 18:52 17
shavuz, а грузить сразу 30 массивов и тормозить UI это the best?
0
shavuz
114 / 120 / 26
Регистрация: 29.01.2014
Сообщений: 596
19.04.2017, 19:01 18
ExFau$t, какая связь?
0
ExFau$t
732 / 605 / 149
Регистрация: 08.05.2012
Сообщений: 2,941
19.04.2017, 19:38 19
Предположим в массиве по 5 элементов, итого 150 строк, загружаться они будут ощутимо долго, около 1-2 сек. А из плюсов "прямой дизайн".
0
shavuz
114 / 120 / 26
Регистрация: 29.01.2014
Сообщений: 596
19.04.2017, 19:42 20
ExFau$t, 1-2 секунды это очень долго, массив такого размера загрузится в десятки раз быстрее как минимум.
0
19.04.2017, 19:42
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.04.2017, 19:42

Как сделать import класса TObject в обычный юнит?
Добрый день, Разбираюсь с инклюдами и алгоритмом подключения файлов в CBuilder. Есть Vcl...

Как сделать идентичный обычный калькулятор Виндовса в делфи
Как сделать идентичный обычный калькулятор Виндовса в делфи, чтобы можно было вводить с цифровой...

BindingNavigator. Как сделать фильтр по двум значениям?
Из Access данные импортируются в dataGridView Данные фильтруются по средствам bindingNavigator. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru