Android - Глобальные переменные? - PullRequest
0 голосов
/ 28 декабря 2011

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

Класс:

public class MyApplication extends Application {

    private String someVariable;

    public String getSomeVariable() {
        return someVariable;
    }

    public void setSomeVariable(String someVariable) {
        this.someVariable = someVariable;
    }
}

Реализация:

MyApp appState = ((MyApp)getApplicationContext());
String state = appState.getSomeVariable();

Это работает, если я нахожусь в деятельности.

Но если я в классе, не расширенном из Activity, как я могу получить доступ к своим данным?

Заранее спасибо за помощь!

Ответы [ 6 ]

5 голосов
/ 28 декабря 2011

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

public class SingletonClass {
private static SingletonClass _instance = null;
private int _value = 0;

private SingletonClass() {
}

public static SingletonClass getInstance() {
    if (_instance == null)
        _instance = new SingletonClass();
    return _instance;
}

public int getValue() {
    return _value;
}

public void setValue(int value) {
    _value = value;
}

}

, а затем получить к нему доступ так:

SingletonClass.getInstance().getValue();

Примечание. Это хороший и простой способ решения некоторых проблем программирования, но используйте его с умом ... он сопровождает проблемы

3 голосов
/ 28 декабря 2011

Использовать SharedPrefferences

http://developer.android.com/guide/topics/data/data-storage.html

1 голос
/ 28 декабря 2011

Возможно, введя все необходимые данные класса с помощью конструктора или специального установщика, я бы предложил прежний.( Внедрение в конструктор по сравнению с инъекцией в сеттер )

Существуют и другие решения, такие как статические поля, но лично мне не нравится этот подход, поскольку статика иногда делает модульное тестирование немного запутанным.

Кстати, с какими переменными вы хотите поделиться?

0 голосов
/ 28 декабря 2011

Передайте контекст вашей деятельности в качестве параметра методу или классу:

// ...
public void doStuff(Context context) {
    // for example, to retrieve and EditText
    EditText et = context.findViewById(R.id.editText1);
}

тогда, по вашей деятельности, вы сделаете:

// ...
MyClass myClass = new MyClass();
// ...
myClass.doStuff(this);
// ...
0 голосов
/ 28 декабря 2011

Вы можете использовать статические методы (или переменные, если они общедоступны). Это действительно немного грязно, но если вы правильно сгруппируете их (методы), вы получите счастье и удовлетворение)

static public int getSomeInt(){
     //something
}

А затем в любом месте вашего приложения используйте

int x=MyApplication.getSomeInt();

Кстати, используя этот стиль, вам не нужно расширять класс Application. Для таких целей лучше создать абстрактный класс.

0 голосов
/ 28 декабря 2011

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

Просто создайте класс со всеми полями как статическими, и вы можетеиспользуйте их во всем приложении.Он не стирается, только при остановке приложения.

Вы также можете просто добавить статические переменные в свой класс приложения.

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