You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android ViewModel无法初始化:InstantiationException问题求助

问题解决:InstantiationException无法实例化CounterViewModel

核心原因

你的CounterViewModel被声明为抽象类(abstract class),抽象类无法被直接实例化,而ViewModelProvider的默认工厂仅能创建非抽象、且具备无参构造方法的ViewModel实例。

解决方案

移除CounterViewModel类的abstract修饰符,将其改为具体类即可。

修改后的CounterViewModel代码

package ca.sheridancollege.fangyux.livedata_counterappausing

import android.os.CountDownTimer
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel

class CounterViewModel : ViewModel() {

    lateinit var timer: CountDownTimer
    private val timeLeft = MutableLiveData<Int>()

    fun startTimer() {
        timer = object : CountDownTimer(10000, 1000) {
            override fun onTick(p0: Long) {
                timeLeft.value = (p0 / 1000).toInt()
            }

            override fun onFinish() {
                // 可在此添加倒计时结束后的逻辑,比如将时间置0
                timeLeft.value = 0
            }
        }.start()
    }

    fun getTimeLeft(): LiveData<Int> {
        return timeLeft
    }
}

补充说明

  • 抽象类的设计初衷是作为基类供子类继承实现,直接实例化抽象类违背了其设计逻辑。
  • 修改后,ViewModelProvider可通过无参构造正常创建CounterViewModel实例,InstantiationException异常会被解决。

内容的提问来源于stack exchange,提问作者Emir Khan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 00:37:08