Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/215.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kotlin/Android Studio-如何将变量从覆盖乐趣传递到应用程序的其余部分?_Android_Android Studio_Variables_Kotlin_Global Variables - Fatal编程技术网

Kotlin/Android Studio-如何将变量从覆盖乐趣传递到应用程序的其余部分?

Kotlin/Android Studio-如何将变量从覆盖乐趣传递到应用程序的其余部分?,android,android-studio,variables,kotlin,global-variables,Android,Android Studio,Variables,Kotlin,Global Variables,我环顾了一下四周,没有找到我的问题的好答案。在我的应用程序中,我有一个计时器。这个计时器在单击时停止,我想根据剩余时间计算分数。我可以使用“millisUntilFinished”来计算分数,但我不能在我的应用程序中重用分数变量。你能帮我找到正确/最好的方法吗?下面是我的代码: var score: Long val timer = object : CountDownTimer(20000, 1000) { override fun onTick(millis

我环顾了一下四周,没有找到我的问题的好答案。在我的应用程序中,我有一个计时器。这个计时器在单击时停止,我想根据剩余时间计算分数。我可以使用“millisUntilFinished”来计算分数,但我不能在我的应用程序中重用分数变量。你能帮我找到正确/最好的方法吗?下面是我的代码:

var score: Long

        val timer = object : CountDownTimer(20000, 1000) {
        override fun onTick(millisUntilFinished: Long)  {
            timer.setText("" + millisUntilFinished / 1000)
              score = millisUntilFinished / 1000
            }
            override fun onFinish() {
            timer.setText("0");
        }
    }
    timer.start()
当我稍后尝试在我的应用程序中使用它时,我得到了一个“变量‘score’必须初始化”。我尝试了很多方法,但每次都无法重用在重写中初始化的变量


谢谢你的帮助

您可以将其定义为
lateinit var
,也可以对其进行初始化

lateinit var score: Long

        val timer = object : CountDownTimer(20000, 1000) {
        override fun onTick(millisUntilFinished: Long)  {
            timer.setText("" + millisUntilFinished / 1000)
              score = millisUntilFinished / 1000
            }
            override fun onFinish() {
            timer.setText("0");
        }
    }
    timer.start()
请注意,
lateinit
在类中而不是在函数中定义。 或者,您可以使用:

var score=0.toLong()

        val timer = object : CountDownTimer(20000, 1000) {
        override fun onTick(millisUntilFinished: Long)  {
            timer.setText("" + millisUntilFinished / 1000)
              score = millisUntilFinished / 1000
            }
            override fun onFinish() {
            timer.setText("0");
        }
    }
    timer.start()

请格式化代码很可能是因为在您尝试访问分数之前,您的计时器没有勾选,所以分数从未初始化过。这段代码甚至不会编译,因为您也不会首先初始化score,所以不知道如何获得运行时异常……您不应该为score设置初始值吗
var score:Lang=0
左右?通常,您希望在编写的任何代码中避免使用全局变量。我不知道您的经验是什么,但您应该很快开始研究MVVM之类的设计模式,以了解如何在应用程序中移动数据。您现在也可以使用侦听器,如果您真的想拥有一个全局变量,那么看看静态变量和单例模式。但我要重申,使用它们通常是一个坏主意,除非你确切知道自己在做什么。@VadimCaen鉴于我们展示的代码数量很少,这是一个荒谬的建议。拥有类级别的状态变量是非常常见的——它们不太可能是真正的全局变量。你的建议与他的问题无关,实际上也不是基于发布的代码。