Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Variable global de Android

¿Cómo puedo crear variable global keep keep values ​​alrededor del ciclo de vida de la aplicación independientemente de la actividad en ejecución.

    12 Solutions collect form web for “Variable global de Android”

    Puede extender la clase base android.app.Application y agregar variables de miembro como así:

     public class MyApplication extends Application { private String someVariable; public String getSomeVariable() { return someVariable; } public void setSomeVariable(String someVariable) { this.someVariable = someVariable; } } 

    En tu manifiesto android debes declarar la clase implementando android.app.Application (agrega el atributo android:name=".MyApplication" a la etiqueta de la aplicación existente):

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

    Entonces en sus actividades usted puede conseguir y fijar la variable así:

     // set ((MyApplication) this.getApplication()).setSomeVariable("foo"); // get String s = ((MyApplication) this.getApplication()).getSomeVariable(); 

    Puede utilizar un Patrón Singleton. Me gusta esto:

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

    En su aplicación puede acceder a su singleton de esta manera:

     MyProperties.getInstance().someValueIWantToKeep 

    Esta variable global funciona para mi proyecto

     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; 

    Puede utilizar las preferencias de la aplicación. Ellos son accesibles desde cualquier actividad o pieza de código, siempre y cuando pase el objeto Context, y son privados para la aplicación que los usa, por lo que no necesita preocuparse por exponer valores específicos de la aplicación, a menos que trate de enrutados Dispositivos. Aún así, puede usar esquemas de hash o cifrado para guardar los valores. Además, estas preferencias se almacenan desde una aplicación ejecutada a la siguiente. Aquí hay algunos ejemplos de código que puede ver.

    Hay algunas maneras diferentes que puede lograr lo que está pidiendo.

    1.) Amplíe la clase de aplicación e instancie su controlador y modelos de objetos allí.

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

    A continuación, puede llamar a su Singleton desde su objeto de aplicación personalizado en cualquier momento:

     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.) Usted puede tener su controlador sólo crear una instancia singleton de sí mismo:

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

    Entonces simplemente puede llamar al método create de cualquier Actividad o Fragmento y creará un nuevo controlador si aún no existe, de lo contrario devolverá el controlador preexistente.

    3.) Por último, hay un marco liso creado en Square que le proporciona la inyección de dependencia dentro de Android. Se llama Daga . No voy a entrar en cómo usarlo aquí, pero es muy astuto si necesita ese tipo de cosas.

    Espero haber dado suficiente detalle en cuanto a cómo puede hacer lo que está esperando.

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

    Intente esto:

    Crear una clase de datos compartida:

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

    Declarado / Initiaze una instancia de clase globalmente en aquellas clases en las que desea establecer / obtener datos (utilizando este código antes del método onCreate() ):

     Globals sharedData = Globals.getInstance(); 

    Establecer datos:

     sharedData.setValue("kundan"); 

    Obtener datos:

     String n = sharedData.getValue(); 

    Puedes crear una clase globle como esta

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

    Luego defínalo en el manifiesto

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

    Ahora usted puede fijar los valores para glolble variable como esto

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

    Puedes obtener esos valores como este

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

    Por favor encuentre un ejemplo completo de este blog- Globle Variables

    He comprobado la respuesta similar, pero los que se dan aquí no se ajustan a mis necesidades. Encontré algo que, desde mi punto de vista, es lo que estás buscando. El único punto negro posible es un asunto de seguridad (o tal vez no) ya que no sé acerca de la seguridad.

    Sugiero el uso de la interfaz (no hay necesidad de utilizar la clase con el constructor y así …), ya que sólo tiene que crear algo como:

     public interface ActivityClass { public static final String MYSTRING_1 = "STRING"; public static final int MYINT_1 = 1; } 

    A continuación, puede acceder a todas las ubicaciones de sus clases utilizando lo siguiente:

     int myInt = ActivityClass.MYINT_1; String myString = ActivityClass.MYSTRING_1; 
     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; } } 

    Si es posible, debe declarar las variables que necesita mantener vivas que no han sido claras por Garbage Collector o Unload por OS en el archivo .so Para hacerlo, debe codificar por C / C ++ y compilar al archivo .so lib y Cargarlo en su MainActivity.

    ¡¡¡¡Fácil!!!!

    Aquellas variables a las que desea acceder como variables globales, se pueden declarar como variables estáticas. Y ahora, puede acceder a esas variables utilizando

    Classname.variablename;

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

    }

    MyProperites.someValueIWantToKeep;

    ¡Eso es! 😉

      FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.