【问题标题】:How to use global variables in other activities如何在其他活动中使用全局变量
【发布时间】:2018-09-12 08:09:29
【问题描述】:

我试图从另一个类中的一个类中获取全局变量,但它只得到一个空字符串。

class Abfahrtsmonitor : AppCompatActivity() {

    // Initializing an empty ArrayList to be filled with animals
    val Haltestellen: ArrayList<String> = ArrayList()

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        val Haltestellenname = MapsAnzeigeActivity().haltestellen_name
    }
}

是我想要的。我的班级MapsAnzeigeActivity 大致是这样的:

class MapsAnzeigeActivity : AppCompatActivity(), OnMapReadyCallback {
    var haltestellen_name = "" 

    override fun onCreate(savedInstanceState: Bundle?) {
        // ....
    }

    fun changeHaltestellen() {
        haltestellen_name = "new"
    }
}

【问题讨论】:

  • 我在你的代码中找不到全局变量(顶级变量)。
  • 它们是不同包中的文件吗?
  • 它们都在同一个包中

标签: android kotlin global-variables


【解决方案1】:

当你运行这段代码时:

val Haltestellenname = MapsAnzeigeActivity().haltestellen_name

它将创建一个MapsAnzeigeActivity 的新实例,因为haltestellen_name 的默认值是"",这就是你得到一个空字符串的原因。

要创建一个全局变量(Java 中称为静态变量),您应该使用Companion Object

class MapsAnzeigeActivity : AppCompatActivity(), OnMapReadyCallback {
    companion object {
       var haltestellen_name: String
    }
}

class Abfahrtsmonitor : AppCompatActivity() {
    // Initializing an empty ArrayList to be filled with animals
    val Haltestellen: ArrayList<String> = ArrayList()
    val Haltestellenname = MapsAnzeigeActivity.haltestellen_name
}

【讨论】:

    【解决方案2】:

    试试这个:

    class MapsAnzeigeActivity : AppCompatActivity(), OnMapReadyCallback {
        companion object {
           var haltestellen_name: String
        }
    }
    
    class Abfahrtsmonitor : AppCompatActivity() {
    
    // Initializing an empty ArrayList to be filled with animals
    val Haltestellen: ArrayList<String> = ArrayList()
    val Haltestellenname = MapsAnzeigeActivity.haltestellen_name
    }
    

    【讨论】:

      【解决方案3】:

      您有多种选择:

      首先,您可以拥有一个像这样的单例类,并在需要时获取数据。

      public class MyData {
      
          private ArrayList<String> data;
          private static MyData INSTANCE = new MyData();
          private MyData() {
      
          }
      
          public static MyData getInstance() {
                 return INSTANCE;
          }
      
          public ArrayList<String> getData() {
                 return this.data;
          }
      
      }
      

      当您想要获取数据时,请尝试以下代码:

      MyData.getInstance().getData() 
      

      它将您的数据保存在内存中,当您关闭应用程序时,您的数据将丢失。

      另一种选择是将您的数据保存在 SharedPrefs 或 Sqlite 中,它的好处是即使您的应用程序关闭,您也可以获取您的数据。

      另一种简单的方法是让你的数据像这样静态。

      public static ArrayList<String> data = new ArrayList();
      

      【讨论】:

        猜你喜欢
        • 2020-01-25
        • 2022-11-15
        • 2017-03-20
        • 2012-08-25
        • 1970-01-01
        • 1970-01-01
        • 2019-02-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多