JAVA中的全局变量替代方案

时间:2014-03-04 12:47:49

标签: java android

我还是Android应用开发的新手。

我在QSLite数据库中有一个表,它为我提供了关于每个用户的关键参数。典型的表格如下图所示;

enter image description here

当用户登录应用程序时,我想设置一些我可以在整个应用程序中使用的常量。例如,如果上表中UserID = 3的用户登录,我想获取此UserID(CurrentUserID)。然后,我将使用该ID从应用程序活动中的任何位置检查他是来自位置2,还是来自哪个DataSourceID。结果将决定我应该向用户显示/提供哪种类型的活动。

在Access中,我们使用了全局变量。但是,根据我在java中读到的内容,不推荐使用公共静态变量(等效)。

你能否指出一些关于如何在Java中解决这样的挑战的例子?

5 个答案:

答案 0 :(得分:1)

创建单个对象并使用值

填充它

http://en.wikipedia.org/wiki/Singleton_pattern

答案 1 :(得分:1)

您可以扩展Application类 - IS 一个单例 - 并将变量保存为字段或属性

在你的表现中你将这样的类定义为:

<application
    android:name="com.something.SingletonApplication"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >

答案 2 :(得分:0)

答案 3 :(得分:0)

您可以使用静态字段定义类来存储全局值,例如

class Globals {
   public static int var1;
   public static String var2;

   //and so on
}

您可以这种方式访问​​此变量

Globals.var1 = 1;
Globals.var2 = 2;

如果您希望变量为常量,请将“final”添加到任何变量声明

答案 4 :(得分:0)

如果要确保在整个应用程序生命周期中可以使用您的变量,可以扩展Application类

public class MyApplication extends Application
{

  private int userId;

  @Override
  public void onCreate()
  {
    super.onCreate();


  }
  public void setUserId(int id){
     this.userId = id;
  }
  public void getUserId(){
     return this.userId;
  }


  public void customAppMethod()
  {
    // Custom application method
  }

你也可以创建singleton类并继续引用扩展应用程序类的类,但在大多数情况下这并不是必需的,因为在应用程序收到内存警告之前,singleton对象将保留在内存中。

不要忘记添加清单文件:

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