【发布时间】:2021-07-20 20:21:57
【问题描述】:
目前我的应用程序有 4 个活动,一切都很好,直到应用程序进入第 3 个活动。而不是去下一个活动,即第四个活动。它从第三个活动回到第二个活动。
我还尝试在主活动中添加一个按钮,该按钮将我直接带到第四个活动,当我单击该按钮时,应用程序就崩溃了。
在第三个活动中,我有一个倒计时计时器,我希望应用程序在计时器完成后转到下一个活动。所以在 OnFinish 函数中的代码是:
override fun onFinish() {
finish()
val intent = Intent(this@ThirdActivity, FourthActivity::class.java)
startActivity(intent)
}
编辑 1: 在 logcat 中,我被重定向到导致错误的代码行。在第四个活动中,我在 onCreate 方法之前声明了一个变量,当我删除该行时,第四个活动运行良好,但我实际上想要声明该变量。
private val vibrator = getSystemService(Context.VIBRATOR_SERVICE) as Vibrator
并且我在 OnCreate 方法之前声明了它,因为我能够在按钮的 setOnClickListener 中调用 vibrator.cancel(),并且如果我声明了变量——在我创建的用于振动设备的函数中的 Vibrator,那么我得到一个未解决的我在 setOnClickListener 中调用 vibrator.cancel() 的参考错误
在振动函数中声明变量“振动器”后出现未解决的引用错误的代码:
btnFinish.setOnClickListener{
finish()
vibrator.cancel()
}
编辑 2:
我以某种方式让应用程序运行,一切都运行良好。
振动功能:
private fun vibrate(context: Context){
val vibrator = getSystemService(Context.VIBRATOR_SERVICE) as Vibrator
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
vibrator.vibrate(VibrationEffect.createWaveform(pattern,-1))
}
else{
vibrator.vibrate(500)
}
}
我在 onCreate 中调用了它:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_finish)
vibrate(this@FinishActivity)
我还不得不在 onDestroy 方法 XD 中再次声明变量,然后停止振动
override fun onDestroy() {
val vibrator = getSystemService(Context.VIBRATOR_SERVICE) as Vibrator
super.onDestroy()
vibrator.cancel()
}
【问题讨论】:
-
“当我点击按钮时,应用程序就崩溃了”。然后,您应该将崩溃中的堆栈跟踪添加到您的问题中,并指出堆栈跟踪所引用的代码中的任何位置。
-
你好。我更新了我的问题
-
您的问题仍然缺少一些重要信息,例如您拨打
setOnClickListener的确切位置。我不明白你为什么不能将val vibrator = getSystemService(Context.VIBRATOR_SERVICE) as Vibrator和setOnClickLister调用都放在onCreate中。 -
我确实尝试过。振动器变量也用于该活动的函数中,如果我在 onCreate 中声明该变量,则该活动的函数中使用的振动器变量会给出未解决的参考错误。
-
所以有多个本地
vibrator变量。或者将vibrator设为可空或lateinit成员变量,在onCreate中初始化。
标签: android kotlin android-intent android-activity