【问题标题】:Global variable or Static class for Android appAndroid 应用程序的全局变量或静态类
【发布时间】:2022-11-30 07:01:20
【问题描述】:

我正在使用 Kotlin 开发 Android 应用程序。

例如,我有一个在我的 LoginActivity 上获得的访问令牌,我需要在每个活动上使用这个访问令牌来调用 API。我知道我可以使用 putExtra() 和 getExtra(),但是为每个新活动编写此代码没有意义。

有没有办法创建一个全局变量或类似静态类的东西,应用程序中的所有活动都可以访问它?

正确的 Android 方法是什么?

【问题讨论】:

    标签: android kotlin android-activity


    【解决方案1】:

    我认为 objectcompanion objectwhat you are looking for.

    请注意,object 的实例可能会在您无法控制的情况下被垃圾回收。我建议创建一个 BaseActivity 类,您的所有 Activity 都从该类继承并重写以下方法。

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        savedInstanceState?.let {
            MyObject.refreshFromBundle(it)
        }
    }
    
    override fun onSaveInstanceState(outState: Bundle) {
        MyObject.populateBundle(outState)
        super.onSaveInstanceState(outState)
    }
    

    然后在你的object有以下功能

    fun refreshFromBundle(bundle: Bundle) {
        // Get info from bundle and populate your variables
    }
    
    fun populateBundle(bundle: Bundle) {
        // Put info from variables into the bundle
    }
    

    有关为什么有必要的更多信息here

    【讨论】:

      【解决方案2】:

      您可以使用一个简单的类。

      public class Important{
         private static String key = "";
         public static void setKey(String key){
             this.key = key;
         }
         public static String getKey(){
             return key;
         }
      }
      

      在您的包下创建此类。当您拿到钥匙时,只需致电Important.setKey("key")。然后你可以随时随地拨打Important.getKey()获取你的钥匙

      【讨论】:

      • 这是 Java,我认为它无法编译,因为您没有将 key 字段设为静态
      • 是的,谢谢您的反馈。已编辑
      猜你喜欢
      • 2017-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-12
      • 2022-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多