当前位置: 首页 > 知识库问答 >
问题:

ViewModel在java中没有零参数构造函数。朗,同学们。newInstance(本机方法)

汝宏伯
2023-03-14

由于以下运行时异常,程序无法运行:

无法创建类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())
            }
        }
    }
}

}

共有1个答案

巢安澜
2023-03-14

首先,应该为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 但我不知道该怎么办,把没有指标的工厂退回去。如何实现? 谢谢