如何在其他活动中使用全局变量

问题描述 投票:0回答:3

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

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
3个回答
2
投票

当您运行此代码时:

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
}

1
投票

试试这个:

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
}

1
投票

您有多种选择:

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

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();
© www.soinside.com 2019 - 2024. All rights reserved.