由于以下运行时异常,程序无法运行:
无法创建类ViewModel的实例,并且在java.lang.Class.new实例(本机方法)中没有零参数构造函数
我使用了这样的注入构造:
CharactersViewModel@Inject构造函数(private val charactersUseCase:charactersUseCase,private val searchCharacterCase:searchCharacterCase:ViewModel)
有人知道怎么解决吗?非常感谢
dependencies {
implementation'androidx.room:room-runtime:2.5.0-alpha01'
annotationProcessor'androidx.room:room-compiler:2.5.0-alpha01'
implementation 'androidx.annotation:annotation:1.4.0-alpha02'
implementation 'com.android.support:support-annotations:28.0.0'
implementation 'com.squareup.picasso:picasso:2.71828'
implementation 'com.github.bumptech.glide:glide:4.12.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.12.0'
implementation 'androidx.fragment:fragment-ktx:1.4.1'
implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.5.0-alpha04'
implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.5.0-alpha04'
implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.5.0-alpha04'
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.retrofit2:converter-gson:2.5.0'
implementation "com.google.dagger:hilt-android:2.31.2-alpha"
implementation 'com.google.dagger:dagger:2.31.2'
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.0'
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'androidx.core:core-ktx:1.7.0'
implementation 'androidx.appcompat:appcompat:1.4.1'
implementation 'com.google.android.material:material:1.5.0'
implementation 'androidx.constraintlayout:constraintlayout:2.1.3'
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.3'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
//这是ViewModel类
import android.util.Log
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.alons.marvel_universe.domain.use_cases.CharactersUseCase
import com.alons.marvel_universe.domain.use_cases.SearchCharacterCase
import com.alons.marvel_universe.util.States
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.*
import kotlinx.coroutines.launch
import javax.inject.Inject
@ HiltViewModel
class CharactersViewModel @Inject constructor(
private val charactersUseCase : CharactersUseCase,
private val searchCharacterCase : SearchCharacterCase
) : ViewModel(){
private val marvelValue = MutableStateFlow(MarvelListState())
var _marvelValue : StateFlow<MarvelListState> = marvelValue
fun getSearchedCharacters(search:String)=viewModelScope.launch(Dispatchers.IO){
searchCharacterCase.invoke(search=search).collect {
when(it){
is States.Success ->{
marvelValue.value = MarvelListState(characterList = it.data?: emptyList())
Log.d("toCharacter",_marvelValue.value.toString())
}
is States.Loading ->{
marvelValue.value = MarvelListState(isLoading = true)
Log.d("loading",it.data.toString())
}
is States.Error ->{
marvelValue.value = MarvelListState(error = it.message?:"An Unexpected Error")
Log.d("Error",it.data.toString())
}
}
}
}
fun getAllCharactersData(offset:Int)=viewModelScope.launch(Dispatchers.IO){
charactersUseCase(offset).collect {
when(it){
is States.Success ->{
marvelValue.value = MarvelListState(characterList = it.data?: emptyList())
Log.d("toCharacter",_marvelValue.value.toString())
}
is States.Loading ->{
marvelValue.value = MarvelListState(isLoading = true)
Log.d("loading",it.data.toString())
}
is States.Error ->{
marvelValue.value = MarvelListState(error = it.message?:"An Unexpected Error")
Log.d("Error",it.data.toString())
}
}
}
}
}
首先,应该为viewmodel类注释@HiltViewModel。其次,您应该提供@Singleton或@ViewModelScoped for dagger-hilt等用例,以了解向viewmodel注入什么。
我正在尝试使用recyclerview和room库创建一个简单的ToDoList应用程序。在使用room和mvvm架构方面,我正在遵循android开发者代码实验室,我似乎遇到了困难。我已经设置了应用程序的每一层,但在尝试使用ViewModelProvider实例化ViewModel时出现了一个错误。下面是我的ViewModel类中的代码。 } 下面是我试图初始化ViewModel的main片段中
我正在使用并试图将我的导入我的类。 当使用ViewModel查看Google的hilt文档时,我们可以看到他们能够将注入到所述
我通过本文档了解LiveData和ViewModel。在文档中,ViewModel类具有构造函数, 但是,当我运行代码时,会出现异常: 原因:java.lang.运行时异常:无法创建类的实例UserViewModel原因:java.lang.实例异常:java.lang.类没有零参数构造函数
注:在标记为副本之前,请仔细阅读。我已经尝试了所有现有的答案。 我在用匕首2。 视图模型实例已在活动中成功创建,但当我从同一活动中打开BottomSheet对话框时,无法创建实例。 日志: 用户界面。搜索viewmodel。SearchViewModel
我是新的Android和Java,并试图使基于位置的应用程序。 编辑 我做了一个非常非常简单的测试代码,得到了同样的错误。这是java: 我也犯了同样的错误。以下是我的应用程序级构建中的依赖项。格雷德尔: 原帖 我试图使用ViewModel和LiveData来更新用户位置,因为我知道这是生命周期感知的最佳方式。我有一个默认的地图活动... 一个扩展LiveData以存储用户位置的类。。。 以及一个
我得到了MyViewModel,它的构造函数是空的 我想提供这样的新模型,但有一个问题: 我确实实现了ViewModelProvider.Factory 但我不知道该怎么办,把没有指标的工厂退回去。如何实现? 谢谢