Kotlin在全局类中设置全局变量

时间:2020-04-16 21:49:41

标签: android kotlin

我是Kotlin的新手。 而且我需要Java和Kotlin无法理解的帮助。

对于Java我做到了。但是对于科特林,我不能 事情是, 我创建一个Global Kotlin类 公共类Global:Application()

在MainFest中,我宣布 android:name =“。Global”

在全局类中,我声明了一个变量:

public class Global : Application() {
    open var homeAPIResponse: String = "defaultValue"
}

当我将此全局变量设置为任何值时,将不会保存该值,而当我始终获取该值时,它将显示默认值。我无法理解kotlin中的Java类型getter和setter方法。请帮助我。

我尝试过:

global = Global()
global.homeAPIResponse  = "2nd Text"

Log.d("testingTag", "Testing modified response >>>> " + global.homeAPIResponse)

在日志中,它始终显示默认值。

================================================ ========================= 伙计们,我的目的是全局保存一些价值,将一项活动转移到另一项活动之后,该价值不会消失。

请帮助我提供正确描述的示例,因为我在堆栈溢出中进行了大量搜索。而无法得到它。

预先感谢

4 个答案:

答案 0 :(得分:1)

您知道您可以像这样在一个简单的kt文件中创建全局变量吗?

var homeAPIResponse = "defaultValue"

这样,您可以像这样在任何地方更新它:

homeAPIResponse = "2nd Text"

希望它对您有帮助

答案 1 :(得分:1)

也许可以这样尝试:

public class Global : Application() {
    companion object {
        @JvmField
        var homeAPIResponse: String = "defaultValue"
    }
}

在其他活动中:

Global.homeAPIResponse = "new value"

答案 2 :(得分:1)

似乎您正在手动创建Global()应用程序;你不应该这样做。

启动应用时,会自动创建一个Application类。

您想要将其用作全局变量吗?通过以下方式得到建议的答案:

companion object {
    var globalVariable = "initial value"
}

将其放在Global()类中。不要手动创建新的Global()实例。而是在您的活动中只需致电Global.globalVariable = "your new value"

此外,您可以将其设置为kotlin称为“顶级变量”。在全局类声明中上方声明它,如下所示:

var yourGlobalVariable = "default text"

class Global : Application () {

 // etc.

可以在任何地方使用。开始在您的应用程序中键入它(没有Global,仅靠它自己输入),它将导入。

修改

如果您的目的是使全局变量在活动之间持久存在,那么实际上不建议使用类(甚至是应用程序类)进行操作。

您是否考虑过SharedPreferences

获取

PreferenceManager.getDefaultSharedPreferences(context).getString("key to access with", "default value")

并与

一起存储
PreferenceManager.getDefaultSharedPreferences(context).edit().putString("key to access with", "your new value").apply()

答案 3 :(得分:0)

您也可以这样做。

const val homeAPIResponse: String = "defaultValue"

当您要使用它时,只需在任何地方键入homeAPIResponse

const是编译时间常数。这意味着它们的值必须在编译时分配,这与vals不同,val可以在运行时完成。

这意味着,永远不能将const分配给函数或任何类构造函数,而只能分配给String或基元。