Форум программистов, компьютерный форум, киберфорум
Наши страницы

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Hedd
13 / 13 / 2
Регистрация: 21.01.2015
Сообщений: 131
#1

String-array resources, как глобальная переменная - Программирование Android

22.01.2015, 01:52. Просмотров 679. Ответов 8
Метки нет (Все метки)

Требуется помощь!

У меня есть 16 массивов <string-array>, в активити, когда я хочу обратится к ним, прописывать для каждого
Java
1
2
Resources res_name = getResources();
String[] nameArray = res_name.getStringArray(R.array.name_string_array);
выйдет слишком громоздко.

Я хочу определить массивы глобально, а потом просто получать переменную уже заданного массива.

К примеру, я создал класс GlobalVars.java, из которого хочу получать переменную в активити путем GlobalVars.nameArray, в которой будет содержаться уже определенной массив.
Пробовал задать стандартно в созданном классе GlobalVars.java, но среда ругается, что метод Resources не может быть определен.

Каким образом мне задать эти глобальные переменные и не получить креш приложения?

Добавлено через 5 часов 46 минут
Проблему решил. Если кому будет интересно как - обращайтесь, расскажу.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.01.2015, 01:52
Здравствуйте! Я подобрал для вас темы с ответами на вопрос String-array resources, как глобальная переменная (Программирование Android):

Глобальная переменная в Java - Программирование Android
Подскажите нубу. Недавно начал изучать Java. У меня в методе onClick есть свич для обработки кнопок. Вот отрывок для одной кнопки: public...

SetOnClickListener исчезает глобальная переменная - Программирование Android
Помогите исчезает глобальная переменная //Здесь переменная выводится нормально Log.d(LOG_TAG, &quot;Моя переменная&quot;+tehGuid); ...

Глобальная переменная, которую можно использовать в других Activity - Программирование Android
Здравствуйте, интересует вопрос: как создать переменную, которую я смогу использовать в других классах, и после запуска я смогу к ней...

Обмен данными между Activity (одна глобальная переменная) - Программирование Android
Добрый день, товарищи. Мой путь в андроиде только начинается, поэтому элементарные для Вас вещи кажутся непонятными для меня. Есть...

Как обратиться в ресурсах на конкретный элемент массива string-array? - Программирование Android
Подскажите пожалуйста начинающему как вывести в ListView или TextView один элемент из массива string-array в ресурсах?

Android.content.res.Resources$NotFoundException: String resource ID #0xffffffaf - Программирование Android
Учу работать с AsyncTask и все время вылазит ошибка android.content.res.Resources$NotFoundException: String resource ID #0xffffffaf ...

8
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,071
22.01.2015, 08:26 #2
В двух словах если можно.
0
Hedd
13 / 13 / 2
Регистрация: 21.01.2015
Сообщений: 131
22.01.2015, 14:00  [ТС] #3
Не уверен, что найденный мною способ соответствует всем нормам и его можно назвать правильным, но по факту он рабочий.

1) в мейн активити задаем переменную instance
Java
1
private static MainActivity instance;
2) Определяем переменную instance в onCreate, обязательно перед super.onCreate
Java
1
2
3
4
protected void onCreate(Bundle savedInstanceState) {
        instance = this;
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
3) Так же определяем два метода в мейн активити
Java
1
2
3
4
5
6
public static MainActivity getInstance() {
        return instance;
    }
    public static Context getContext() {
        return instance.getApplicationContext();
    }
4) В классе для глобальных переменных (у меня это класс GlobalVars) определяем context и можем задать ресурсы
Java
1
2
3
4
public class GlobalVars {
 public static Context context = MainActivity.getContext();
 public static final String[] days = context.getResources().getStringArray(R.array.daysList);
}
5) Теперь можем обратится к ресурсам из другого класса. Я обращался из мейн активити. Достаточно написать
Java
1
GlobalVars.days
0
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,071
22.01.2015, 15:29 #4
Не знаю как у вас используютя эти глобальные переменные, но static MainActivity смущает.
А не использовать ли лучше sqlite?
0
Spelcrawler
527 / 497 / 111
Регистрация: 12.03.2014
Сообщений: 1,663
Завершенные тесты: 1
22.01.2015, 15:46 #5
Hedd, не хорошо так делать - если у вас только одна активити еще куда не шло, но вот если их хотя бы две и вы будете брать эти данные из второй - будет запускаться первая. Она будет кушать память и замедлять работу. Вам всего-то нужно передавать контекст при вызове этих констант из другого класса. Можно хоть так:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class GlobalVars {
 
    private static GlobalVars instance;
    private String[] days;
 
    private GlobalVars(){
 
    }
 
    public String[] getDays(Context context){
        return context.getResources().getStringArray(R.array.daysList);
    }
 
}
И потом получать их из любого места:
Java
1
GlobalVars.getDays(context);
1
Hedd
13 / 13 / 2
Регистрация: 21.01.2015
Сообщений: 131
22.01.2015, 17:39  [ТС] #6
Rube, меня тоже смущал static MainActivity, но на тот момент я не нашел другого решения. Об SQLite не думал. Мне казалось, что с моим небольшим кол-вом данных SQLite будет лишним. Возможно я не прав
0
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,071
22.01.2015, 17:44 #7
Да тут дело не в кол-ве данных, а в методах их использования, типа выборки записей при определенном условии.
Я ж говорю - смотря как данные используются, отсюда и плясать.
0
Hedd
13 / 13 / 2
Регистрация: 21.01.2015
Сообщений: 131
22.01.2015, 18:00  [ТС] #8
Rube, У меня при нажатии на определенный элемент спиннера отображается ListView с определенными данными, которые хранятся в строковых массивах. Каждый элемент-строка ListView состоит из 4 элементов TextView с разными данными.

Добавлено через 9 минут
Spelcrawler, Понял о чем вы говорите. У меня сейчас одна активити. Попробую как-нибудь ваш вариант. Только у меня вопрос, где будет тогда использоваться instance и days с вашего кода. Так же, разве при вызове GlobalVars.getDays(context) из любого другого класса, среда не будет ругаться, что переменная context не определена?
0
Spelcrawler
527 / 497 / 111
Регистрация: 12.03.2014
Сообщений: 1,663
Завершенные тесты: 1
23.01.2015, 09:32 #9
Цитата Сообщение от Hedd Посмотреть сообщение
где будет тогда использоваться instance и days с вашего кода
Нигде, сначала по другому хотел написать - потом упростил.
Цитата Сообщение от Hedd Посмотреть сообщение
Так же, разве при вызове GlobalVars.getDays(context) из любого другого класса, среда не будет ругаться, что переменная context не определена?
А вы ее определяйте в активити можно писать this вместо контекст т.к. класс Activity наследуется от класса Context. Еще от контекста наследуется Service. Во всех остальных классах нужно получать контекст от активити или от сервиса, а потом посылать дальше.
1
23.01.2015, 09:32
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.01.2015, 09:32
Привет! Вот еще темы с ответами:

String-array - Программирование Android
много файлов string-array в values можно ли и как к ним обращаться по номеру?

Array type expected; found: 'java.lang.string' - Программирование Android
public boolean numCheck(String str, int sys) { boolean sysCheck = false; for (int i = 0; i &lt; str.length(); i++) ...

Получить первую букву из слова (переменная String) - Программирование Android
есть переменная String &quot;word&quot;. Как получить первую букву w? Добавлено через 7 минут вот это ошибку выбивает charAt(int index) -...

Глобальная переменная string - C#
Как сделать переменную string, которая бы работала во всех формах? Допустим я на родительской форме создаю string text =&quot;&quot;; на...


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

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

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