【问题标题】:global variables alternatives in JAVAJAVA中的全局变量替代方案
【发布时间】:2014-03-04 12:47:48
【问题描述】:

我还是安卓应用开发的新手。

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

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

在 Access 中,我们使用了全局变量。但是,从我在 java 中阅读的内容来看,不建议使用公共静态变量(等效)。

您能否举一些例子说明 Java 是如何解决此类挑战的?

【问题讨论】:

  • @Darkhogg,编辑应该为帖子增加价值...为标题添加标签不是改进 - 事实上,您会发现有多少用户开始从标题中删除标签,因为它们已经在标签中,当有人搜索特定术语时会考虑这些标签。有关更多信息,请参阅 StackOverflow Meta 上的 Should questions include “tags” in their titles? 帖子。
  • @Sheridan 添加标签或删除已经存在的标签同样有用:阅读标题后,我什至不看标签。在这种特殊情况下,作为一个 Android 问题相关的。很抱歉给您带来不便,但如果标题中包含 Java,那么标题中也应包含 Android
  • 我认为无论是在标题中添加还是删除标签都没有用......也不会在帖子中添加任何内容,而这正是编辑的真正目的。
  • 非常感谢大家抽出宝贵的时间为我指明正确的方向。

标签: java android


【解决方案1】:

创建一个单例对象并用值填充它

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

【解决方案2】:

【讨论】:

    【解决方案3】:

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

    在您的清单中,您将此类定义为:

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

    【讨论】:

    • 请注意,Application 本身并不是一个单例(不是getInstance(),没有办法阻止多个实例...),但是 Android 处理它的方式使它成为一个类似单例的类。
    • 让我们这样说:android 生命周期管理是一个单例(如果你在清单中定义它)。您当然可以在其他地方实例化它,风险自负:)
    【解决方案4】:

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

    class Globals {
       public static int var1;
       public static String var2;
    
       //and so on
    }
    

    你可以通过这种方式访问​​这个变量

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

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

    【讨论】:

      【解决方案5】:

      如果您想确保您的变量可以在整个应用程序生命周期中使用,您可以扩展 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
        }
      

      您还可以创建单例类并保留对扩展应用程序类的类的引用,但这在大多数情况下并不是必需的,因为单例对象将保留在内存中,直到应用程序收到内存警告。

      不要忘记在清单文件中添加:

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

      【讨论】:

        猜你喜欢
        • 2021-09-10
        • 1970-01-01
        • 1970-01-01
        • 2018-01-07
        • 1970-01-01
        • 2019-06-13
        • 1970-01-01
        • 2023-03-30
        • 2012-12-17
        相关资源
        最近更新 更多