Android全局variables

如何在应用程序的生命周期中创build全局variableskeep keep values而不pipe哪个活动正在运行..

你可以扩展基类android.app.Application类并添加如下的成员variables:

 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"> 

然后在你的活动中,你可以得到和设置这样的variables:

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

你可以使用单例模式。 喜欢这个:

 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 

这个全局variables适用于我的项目

 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; 

您可以使用应用程序首选项 只要传递Context对象,它们就可以从任何活动或代码段访问,而且它们对于使用它们的应用程序来说是私有的,所以您不必担心公开应用程序特定的值,除非处理路由设备。 即使如此,您也可以使用散列或encryptionscheme来保存值。 而且,这些首选项从应用程序运行到下一个应用程序。 这里有一些代码示例,你可以看看。

有几种不同的方式可以实现你所要求的。

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

然后,您可以随时从您的自定义应用程序对象中调用您的单例:

 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)你可以让你的控制器创build一个自己的单例实例:

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

然后,您可以从任何Activity或Fragment调用create方法,如果尚不存在,它将创build一个新的控制器,否则将返回预先存在的控制器。

3.)最后,在Square中创build了一个漂亮的框架,它提供了Android中的dependency injection。 它被称为匕首 。 我不会在这里介绍如何使用它,但是如果你需要这样的东西,那就很光滑。

我希望我已经提供了足够的细节,关于你如何能够做到你所希望的。

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

尝试像这样:

创build一个共享数据类:

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(); 

我检查了类似的答案,但这里给出的不符合我的需要。 从我的angular度来看,我发现了一些你正在寻找的东西。 唯一可能的黑点是安全问题(或者可能不是),因为我不了解安全性。

我build议使用接口(无需使用构造函数的类,所以…),因为你只需要创build类似于:

 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; 

你可以像这样创build一个全球化的课程

 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" .... 

现在你可以像这样将值设置为glolblevariables

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

你可以像这样得到这些值

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

请从这个博客全球variablesfind完整的例子

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

如果可能的话,应该在文件.so中声明垃圾收集器或操作系统未卸载所需的保持活动状态的variables。要做到这一点,必须通过C / C ++进行编码并编译为.so lib文件,加载它在你的MainActivity。

简单!!!!

那些想作为全局variables访问的variables,可以声明为静态variables。 而现在,你可以通过使用访问这些variables

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;

而已! ;)