Variable mondiale Android

Comment puis-je créer une variable globale conserver les valeurs autour du cycle de vie de l'application, quelle que soit l'activité en cours..

244
demandé sur Sander Rijken 2009-12-22 10:12:25

14 réponses

vous pouvez étendre la base android.app.Application classe et ajouter des variables membres comme so:

public class MyApplication extends Application {

    private String someVariable;

    public String getSomeVariable() {
        return someVariable;
    }

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

dans votre manifeste android, vous devez déclarer la classe implémentant android.App.Application (Ajouter l'attribut android:name=".MyApplication" à la balise application existante):

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

alors dans vos activités vous pouvez obtenir et mettre la variable comme ceci:

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

// get
String s = ((MyApplication) this.getApplication()).getSomeVariable();
470
répondu Jeff Gilfelt 2016-06-06 17:05:05

Vous pouvez utiliser un Singleton Pattern comme ceci:

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;
    }
}

dans votre application vous pouvez accéder à votre singleton de cette façon:

MyProperties.getInstance().someValueIWantToKeep
35
répondu Ramps 2018-04-25 06:53:03

cette variable globale fonctionne pour mon projet:

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
répondu mahasam 2018-04-25 06:54:07

vous pouvez utiliser les préférences d'application. Ils sont accessibles à partir de n'importe quelle activité ou morceau de code tant que vous passez sur l'objet contextuel, et ils sont privés à l'application qui les utilise, donc vous n'avez pas besoin de vous soucier d'exposer les valeurs spécifiques à l'application, à moins que vous ne vous occupiez de périphériques routés. Même ainsi, vous pourriez utiliser le hachage ou les systèmes de cryptage pour sauver les valeurs. Aussi, ces préférences sont sauvegardées à partir d'une application à l'autre. ici est quelque des exemples de codes que vous pouvez consulter.

11
répondu r1k0 2015-11-05 13:06:06

il y a plusieurs façons de réaliser ce que vous demandez.

1.) Étendre la classe d'application et instancier votre controller et les objets model.

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;
    }

}

alors vous pouvez appeler le votre singleton de votre objet d'Application personnalisé à tout moment:

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.) Vous pouvez avoir votre controller juste créer une instance singleton d'elle-même:

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;
    }
}

alors vous pouvez simplement appeler la méthode create à partir de N'importe quelle activité ou Fragment et elle créera un nouveau controller si un controller n'existe pas déjà, sinon il retournera le controller préexistant.

3.) Enfin, il y a un framework slick créé à Square qui vous fournit l'injection de dépendances au sein D'Android. Il est appelé Dagger . Je ne rentrerai pas dans la façon de l'utiliser ici, mais il est très slick si vous avez besoin de ce genre de chose.

j'espère que j'ai donné assez de détails en ce qui concerne la façon dont vous pouvez faire ce que vous espérez pour.

6
répondu Dan Mikita 2016-08-01 22:10:14

Essayez Comme Ceci:

créer une classe de données partagées:

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;
    }



}

déclare / Initiaze une instance de classe globalement dans les classes où vous voulez définir/obtenir des données (en utilisant ce code avant la méthode onCreate() ): -

Globals sharedData = Globals.getInstance();

Jeu de données:

sharedData.setValue("kundan");

Obtenir des données:

String n = sharedData.getValue();
4
répondu kumar kundan 2015-06-24 05:19:13
// 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;
3
répondu mahasam 2018-04-25 06:54:54

j'ai vérifié pour la même réponse, mais ceux donnés ici ne correspondent pas à mes besoins. J'ai trouver quelque chose qui, de mon point de vue, est ce que vous cherchez. Le seul point noir possible est une question de sécurité (ou peut-être pas) puisque je ne sais pas à propos de la sécurité.

je suggère D'utiliser L'Interface (pas besoin d'utiliser Class avec le constructeur et donc...), puisque vous n'avez qu'à créer quelque chose comme :

public interface ActivityClass {

    public static final String MYSTRING_1 = "STRING";

    public static final int MYINT_1 = 1;

}

alors vous pouvez accéder partout dans votre classes en utilisant le texte suivant:

int myInt = ActivityClass.MYINT_1;
String myString = ActivityClass.MYSTRING_1;
2
répondu Alexandre 2016-11-30 13:20:59

vous pouvez créer un Global Class comme ceci:

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;
    }
}

, Puis le définir dans le manifeste:

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

Maintenant vous pouvez définir des valeurs à la variable globale comme ceci:

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

Vous pouvez obtenir ces valeurs comme ceci:

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

S'il vous plaît trouver un exemple complet de ce blog Variables Globales

2
répondu san88 2018-04-25 06:58:53

utilisez des références partagées pour stocker et récupérer des variables globales.

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
String userid = preferences.getString("userid", null);
1
répondu Coen Damen 2018-04-21 08:06:52
import android.app.Application;

public class Globals extends Application
{
    private static Globals instance = null;
    private static int RecentCompaignID;
    private static int EmailClick;
    private static String LoginPassword;
    static String loginMemberID;
    private static String CompaignName = "";
    private static int listget=0;
    //MailingDetails
    private static String FromEmailadd="";
    private static String FromName="";
    private static String ReplyEmailAdd="";
    private static String CompaignSubject="";
    private static int TempId=0;
    private static int ListIds=0;

    private static String HTMLContent="";
    @Override
    public void onCreate() 
    {
        super.onCreate();
        instance = this;
    }

    public static Globals getInstance()
    {
        return instance;
    }

    public void setRecentCompaignID(int objRecentCompaignID)
    {
        RecentCompaignID = objRecentCompaignID;
    }

    public int getRecentCompaignID() 
    {
        return RecentCompaignID;
    }

    public void setLoginMemberID(String objloginMemberID) 
    {
        loginMemberID = objloginMemberID;
    }

    public String getLoginMemberID() 
    {
        return loginMemberID;
    }

    public void setLoginMemberPassword(String objLoginPassword)
    {
        LoginPassword = objLoginPassword;
    }

    public String getLoginMemberPassword()
    {
        return LoginPassword;
    }

    public void setEmailclick(int id)
    {
        EmailClick = id;
    }

    public int getEmailClick() 
    {
        return EmailClick;
    }
    public void setCompaignName(String objCompaignName)
    {
        CompaignName=objCompaignName;
    }
    public String getCompaignName()
    {
        return CompaignName;
    }
    public void setlistgetvalue(int objlistget)
    {
        listget=objlistget;
    }
    public int getlistvalue()
    {
        return listget;
    }
    public void setCompaignSubject(String objCompaignSubject)
    {
         CompaignSubject=objCompaignSubject;
    }
    public String getCompaignSubject()
    {
        return CompaignSubject;
    }
    public void setHTMLContent(String objHTMLContent)
    {
        HTMLContent=objHTMLContent;
    }
    public String getHTMLContent()
    {
        return HTMLContent;
    }
    public void setListIds(int objListIds)
    {
        ListIds=objListIds;
    }
    public int getListIds()
    {
        return ListIds;
    }
    public void setReplyEmailAdd(String objReplyEmailAdd)
    {
        ReplyEmailAdd=objReplyEmailAdd;
    }
    public String getReplyEmailAdd()
    {
        return ReplyEmailAdd;
    }
    public void setFromName(String objFromName)
    {
        FromName=objFromName;
    }
    public String getFromName()
    {
        return FromName;
    }
    public void setFromEmailadd(String objFromEmailadd)
    {
        FromEmailadd=objFromEmailadd;
    }
    public String getFromEmailadd()
    {
        return FromEmailadd;
    }
}
0
répondu user2054528 2013-06-14 13:48:06

si possible, vous devriez déclarer les variables que vous devez garder en vie qui n'ont pas été claires par le collecteur D'ordures ou décharger par OS dans le fichier .donc Pour le faire, vous devez coder par C / C++ et compiler vers .donc lib fichier et le charger dans votre activité principale.

0
répondu Tran Huu Phuoc 2013-11-21 03:18:33

techniquement, cela ne répond pas à la question, mais je recommande d'utiliser la base de données de la salle au lieu de n'importe quelle variable globale. https://developer.android.com/topic/libraries/architecture/room.html Même si vous avez "seulement" besoin de stocker une variable globale et ce n'est pas grand chose et ce n'est pas le cas, mais utiliser la base de données de la salle est la façon la plus élégante, native et bien soutenue de garder des valeurs autour du cycle de vie de l'activité. Il aidera à prévenir de nombreuses les questions, en particulier l'intégrité des données. Je comprends que la base de données et la variable globale sont différentes, mais s'il vous plaît utiliser Room pour la maintenance du code, la stabilité de l'application et l'intégrité des données.

0
répondu hexicle 2017-12-08 08:51:51

facile!!!!

ces variables auxquelles vous voulez accéder en tant que variable globale, vous pouvez les déclarer en tant que variables statiques. Et maintenant, vous pouvez accéder à ces variables en utilisant

nom de classe.nomvariable;

public class MyProperties {
private static MyProperties mInstance= null;

static int someValueIWantToKeep;

protected MyProperties(){}

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

}

Mypropérites.someValueIWantToKeep;

C'Est Ça! ;)

-6
répondu Dinesh Padwal 2013-02-06 11:11:01