Форум программистов, компьютерный форум CyberForum.ru

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

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

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

22.01.2015, 01:52. Просмотров 604. Ответов 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 минут
Проблему решил. Если кому будет интересно как - обращайтесь, расскажу.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.01.2015, 01:52     String-array resources, как глобальная переменная
Посмотрите здесь:

Android AsyncTask<String, String, String> объясните пожалуйста
Как обратиться в ресурсах на конкретный элемент массива string-array? Android
Android SetOnClickListener исчезает глобальная переменная
Получить первую букву из слова (переменная String) Android
Глобальная переменная, которую можно использовать в других Activity Android
Android Android.content.res.Resources$NotFoundException: String resource ID #0xffffffaf
Android В классе не Activity доступ к Resources
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,070
22.01.2015, 08:26     String-array resources, как глобальная переменная #2
В двух словах если можно.
Hedd
13 / 13 / 2
Регистрация: 21.01.2015
Сообщений: 131
22.01.2015, 14:00  [ТС]     String-array resources, как глобальная переменная #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
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,070
22.01.2015, 15:29     String-array resources, как глобальная переменная #4
Не знаю как у вас используютя эти глобальные переменные, но static MainActivity смущает.
А не использовать ли лучше sqlite?
Spelcrawler
525 / 495 / 111
Регистрация: 12.03.2014
Сообщений: 1,647
Завершенные тесты: 1
22.01.2015, 15:46     String-array resources, как глобальная переменная #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);
Hedd
13 / 13 / 2
Регистрация: 21.01.2015
Сообщений: 131
22.01.2015, 17:39  [ТС]     String-array resources, как глобальная переменная #6
Rube, меня тоже смущал static MainActivity, но на тот момент я не нашел другого решения. Об SQLite не думал. Мне казалось, что с моим небольшим кол-вом данных SQLite будет лишним. Возможно я не прав
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,070
22.01.2015, 17:44     String-array resources, как глобальная переменная #7
Да тут дело не в кол-ве данных, а в методах их использования, типа выборки записей при определенном условии.
Я ж говорю - смотря как данные используются, отсюда и плясать.
Hedd
13 / 13 / 2
Регистрация: 21.01.2015
Сообщений: 131
22.01.2015, 18:00  [ТС]     String-array resources, как глобальная переменная #8
Rube, У меня при нажатии на определенный элемент спиннера отображается ListView с определенными данными, которые хранятся в строковых массивах. Каждый элемент-строка ListView состоит из 4 элементов TextView с разными данными.

Добавлено через 9 минут
Spelcrawler, Понял о чем вы говорите. У меня сейчас одна активити. Попробую как-нибудь ваш вариант. Только у меня вопрос, где будет тогда использоваться instance и days с вашего кода. Так же, разве при вызове GlobalVars.getDays(context) из любого другого класса, среда не будет ругаться, что переменная context не определена?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.01.2015, 09:32     String-array resources, как глобальная переменная
Еще ссылки по теме:

Android Array type expected; found: 'java.lang.string'
Swap resources одной кнопкой Android
Глобальная переменная в Java Android
Android Обмен данными между Activity (одна глобальная переменная)
String-array Android

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

Или воспользуйтесь поиском по форуму:
Spelcrawler
525 / 495 / 111
Регистрация: 12.03.2014
Сообщений: 1,647
Завершенные тесты: 1
23.01.2015, 09:32     String-array resources, как глобальная переменная #9
Цитата Сообщение от Hedd Посмотреть сообщение
где будет тогда использоваться instance и days с вашего кода
Нигде, сначала по другому хотел написать - потом упростил.
Цитата Сообщение от Hedd Посмотреть сообщение
Так же, разве при вызове GlobalVars.getDays(context) из любого другого класса, среда не будет ругаться, что переменная context не определена?
А вы ее определяйте в активити можно писать this вместо контекст т.к. класс Activity наследуется от класса Context. Еще от контекста наследуется Service. Во всех остальных классах нужно получать контекст от активити или от сервиса, а потом посылать дальше.
Yandex
Объявления
23.01.2015, 09:32     String-array resources, как глобальная переменная
Ответ Создать тему
Опции темы

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