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
相关产品推荐
相关产品推荐

