создание класса в качестве глобального хранилища для переменных, используемых в нескольких действиях приложения - PullRequest
0 голосов
/ 04 ноября 2011

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

Я определяю класс следующим образом:

public class GlobalVars {
    public static String str1;
    public static String str2;
    public static Integer int1;
    public static Integer int2;

    public static MyDBAdapter myDBAdapter;

    public static Boolean isOK1() {
        return str1.length() > 3;
    }
}

Вот как я заполняю их в начале приложения:

private void getAllInfo() {

        // first get the info
        Cursor appCursor = cursor;

        GlobalVars.str1 = appCursor.getString(appCursor
                .getColumnIndexOrThrow(MyDBAdapter.KEY1));
        if (GlobalVars.str1 != null) {
        } else {
            GlobalVars.str1 = "";
        }

        GlobalVars.int1 = appCursor.getInt(appCursor
                .getColumnIndexOrThrow(MyDBAdapter.KEY_NUMBER1));
        if (GlobalVars.int1 != null) {
        } else {
            GlobalVars.int1 = 1;
        }

и я получаю доступ к этим значениям, просто написав

GlobalVars.int1 = ...

или

i = GlobalVars.int1;

везде, где мне нужно

В самом конце, когда приложение заканчивается, я помещаю все значения обратно в БД.

Это лучший способ обработки глобальных переменных таким образом?

Я получаю действительно странные ошибки NullPointerException при доступе к переменной GlobalVars.int1 с пользователями, которые получили приложение - хотя я на 100%, значение всегда назначается правильно и никогда с нулевым значением.

Нужно ли выделять объект GlobalVars перед его использованием? Есть ли какое-либо возможное объяснение того, как эти значения могут стать нулевыми, если я нигде не назначу нулевое значение?

Спасибо

Ответы [ 2 ]

1 голос
/ 04 ноября 2011

Я бы порекомендовал использовать общие настройки для конфигурации / общего хранилища данных (при условии, что у вас их разумное количество - база данных потенциально неограниченная)

Я работаю с инжектором зависимостей для настроек (значения настроекиз настроек уже работает): https://github.com/ko5tik/andject

Что касается вашего вопроса о нулевом значении - если вы его не присваиваете, оно равно нулю

1 голос
/ 04 ноября 2011

В Android существует концепция SharedPreferences, которая позволяет хранить примитивные значения и получать к ним доступ из любой деятельности вашего приложения. Вы можете найти больше информации здесь: http://developer.android.com/guide/topics/data/data-storage.html#pref

Я думаю, что это предпочтительнее, чем класс с только статическими переменными. В главе API о DataStorage вы можете найти и другие интересные идеи, особенно касающиеся постоянного доступа к базе данных.

И значения в вашем классе null, потому что это значение по умолчанию для всех ссылок на объекты. Таким образом, если вы используете Integer вместо int, значением по умолчанию будет null, а не - как и следовало ожидать - 0.

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