Глобальная переменная Android - PullRequest
270 голосов
/ 22 декабря 2009

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

Ответы [ 14 ]

502 голосов
/ 22 декабря 2009

Вы можете расширить базовый класс android.app.Application и добавить переменные-члены следующим образом:

public class MyApplication extends Application {

    private String someVariable;

    public String getSomeVariable() {
        return someVariable;
    }

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

В вашем манифесте Android вы должны объявить класс, реализующий android.app.Application (добавьте атрибут android:name=".MyApplication" в существующий тег приложения):

<application 
  android:name=".MyApplication" 
  android:icon="@drawable/icon" 
  android:label="@string/app_name">

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

// set
((MyApplication) this.getApplication()).setSomeVariable("foo");

// get
String s = ((MyApplication) this.getApplication()).getSomeVariable();
40 голосов
/ 22 декабря 2009

Вы можете использовать Singleton Pattern так:

package com.ramps;

public class MyProperties {
private static MyProperties mInstance= null;

public int someValueIWantToKeep;

protected MyProperties(){}

public static synchronized MyProperties getInstance() {
        if(null == mInstance){
            mInstance = new MyProperties();
        }
        return mInstance;
    }
}

В вашем приложении вы можете получить доступ к вашему синглтону следующим образом:

MyProperties.getInstance().someValueIWantToKeep
13 голосов
/ 16 марта 2013

Эта глобальная переменная работает для моего проекта:

public class Global {
    public static int ivar1, ivar2;
    public static String svar1, svar2;
    public static int[] myarray1 = new int[10];
}


//  How to use other or many activity
Global.ivar1 = 10;

int i = Global.ivar1;
13 голосов
/ 22 декабря 2009

Вы можете использовать настройки приложения. Они доступны из любого действия или фрагмента кода до тех пор, пока вы передаете объект Context, и они являются частными для приложения, которое их использует, поэтому вам не нужно беспокоиться о предоставлении определенных значений приложения, если только вы не имеете дело с маршрутизируемым устройства. Тем не менее, вы можете использовать схемы хеширования или шифрования для сохранения значений. Также эти настройки сохраняются от запуска приложения к следующему. Здесь - несколько примеров кода, которые вы можете посмотреть.

7 голосов
/ 04 мая 2014

Есть несколько способов достичь желаемого.

1.) Расширьте класс приложения и создайте там экземпляр вашего контроллера и модели.

public class FavoriteColorsApplication extends Application {

    private static FavoriteColorsApplication application;
    private FavoriteColorsService service;

    public FavoriteColorsApplication getInstance() {
        return application;
    }

    @Override
    public void onCreate() {
        super.onCreate();
        application = this;
        application.initialize();
    }

    private void initialize() {
        service = new FavoriteColorsService();
    }

    public FavoriteColorsService getService() {
        return service;
    }

}

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

public class FavoriteColorsActivity extends Activity {

private FavoriteColorsService service = null;
private ArrayAdapter<String> adapter;
private List<String> favoriteColors = new ArrayList<String>();

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_favorite_colors);

    service = ((FavoriteColorsApplication) getApplication()).getService();
    favoriteColors = service.findAllColors();

    ListView lv = (ListView) findViewById(R.id.favoriteColorsListView);
    adapter = new ArrayAdapter<String>(this, R.layout.favorite_colors_list_item,
            favoriteColors);
    lv.setAdapter(adapter);
}

2.) Вы можете настроить свой контроллер просто на создание отдельного экземпляра самого себя:

public class Controller {
    private static final String TAG = "Controller";
    private static sController sController;
    private Dao mDao;

    private Controller() {
        mDao = new Dao();    
    }

    public static Controller create() {
        if (sController == null) {
            sController = new Controller();
        }
        return sController;
    }
}

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

3.) Наконец, в Square создана изящная структура, которая обеспечивает внедрение зависимостей в Android. Называется Кинжал . Я не буду вдаваться в подробности, как использовать его здесь, но это очень удобно, если вам нужны такие вещи.

Надеюсь, я достаточно подробно рассказал о том, как вы можете делать то, на что надеетесь.

4 голосов
/ 24 июня 2015

Попробуйте как это:

Создать общий класс данных:

SharedData.java

import android.app.Application;

/**
 * Created by kundan on 6/23/2015.
 */
public class Globals {


    private static Globals instance = new Globals();

    // Getter-Setters
    public static Globals getInstance() {
        return instance;
    }

    public static void setInstance(Globals instance) {
        Globals.instance = instance;
    }

    private String notification_index;


    private Globals() {

    }


    public String getValue() {
        return notification_index;
    }


    public void setValue(String notification_index) {
        this.notification_index = notification_index;
    }



}

Объявлен / Инициализирован экземпляр класса глобально в тех классах, где вы хотите установить / получить данные (используя этот код до onCreate() метода): -

Globals sharedData = Globals.getInstance();

Установить данные:

sharedData.setValue("kundan");

Получить данные:

String n = sharedData.getValue();
4 голосов
/ 03 декабря 2014

Вы можете создать Global Class следующим образом:

public class GlobalClass extends Application{

    private String name;
    private String email;

    public String getName() {
        return name;
    }

    public void setName(String aName) {
        name = aName;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String aEmail) {
        email = aEmail;
    }
}

Затем определите это в манифесте:

<application
    android:name="com.example.globalvariable.GlobalClass" ....

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

final GlobalClass globalVariable = (GlobalClass) getApplicationContext();
globalVariable.setName("Android Example context variable");

Вы можете получить эти значения следующим образом:

final GlobalClass globalVariable = (GlobalClass) getApplicationContext();
final String name  = globalVariable.getName();

Пожалуйста, найдите полный пример из этого блога Глобальные переменные

2 голосов
/ 30 ноября 2016

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

Я предлагаю использовать интерфейс (не нужно использовать Class с конструктором и т. Д.), Так как вам нужно только создать что-то вроде:

public interface ActivityClass {

    public static final String MYSTRING_1 = "STRING";

    public static final int MYINT_1 = 1;

}

Тогда вы можете получить доступ ко всем в пределах ваших классов, используя следующее:

int myInt = ActivityClass.MYINT_1;
String myString = ActivityClass.MYSTRING_1;
2 голосов
/ 05 марта 2013
// My Class Global Variables  Save File Global.Java
public class Global {
    public static int myVi; 
    public static String myVs;
}

// How to used on many Activity

Global.myVi = 12;
Global.myVs = "my number";
........
........
........
int i;
int s;
i = Global.myVi;
s = Global.myVs + " is " + Global.myVi;
1 голос
/ 21 апреля 2018

Используйте SharedPreferences для хранения и извлечения глобальных переменных.

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
String userid = preferences.getString("userid", null);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...