java.lang.class没有零参数构造函数,无法创建一个ViewModel的实例

发布于 2025-02-09 18:04:42 字数 14098 浏览 0 评论 0原文

当我访问应用程序并访问此片段(menstrualFragment)时,应用程序崩溃,这将显示在logcat--

2022-06-23 15:44:59.110 11278-11278/com.miniproject.monthlies E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.miniproject.monthlies, PID: 11278
    java.lang.RuntimeException: Cannot create an instance of class com.miniproject.monthlies.ui.fragments.menstruation.menstrual.MenstrualViewModel
        at androidx.lifecycle.ViewModelProvider$NewInstanceFactory.create(ViewModelProvider.kt:188)
        at androidx.lifecycle.ViewModelProvider$AndroidViewModelFactory.create(ViewModelProvider.kt:238)
        at androidx.lifecycle.SavedStateViewModelFactory.create(SavedStateViewModelFactory.java:112)
        at androidx.lifecycle.SavedStateViewModelFactory.create(SavedStateViewModelFactory.java:146)
        at dagger.hilt.android.internal.lifecycle.HiltViewModelFactory.create(HiltViewModelFactory.java:111)
        at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.kt:171)
        at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.kt:139)
        at androidx.lifecycle.ViewModelLazy.getValue(ViewModelLazy.kt:44)
        at androidx.lifecycle.ViewModelLazy.getValue(ViewModelLazy.kt:31)
        at com.miniproject.monthlies.ui.fragments.MenstrualFragment.getMViewModel(MenstrualFragment.kt:52)
        at com.miniproject.monthlies.ui.fragments.MenstrualFragment.observeViewModel(MenstrualFragment.kt:127)
        at com.miniproject.monthlies.ui.fragments.MenstrualFragment.onCreateView(MenstrualFragment.kt:72)
        at androidx.fragment.app.Fragment.performCreateView(Fragment.java:2963)
        at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:518)
        at androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:282)
        at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:2189)
        at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:2106)
        at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:2002)
        at androidx.fragment.app.FragmentManager$5.run(FragmentManager.java:524)
        at android.os.Handler.handleCallback(Handler.java:938)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:255)
        at android.app.ActivityThread.main(ActivityThread.java:8212)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:632)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1049)
     Caused by: java.lang.InstantiationException: java.lang.Class<com.miniproject.monthlies.ui.fragments.menstruation.menstrual.MenstrualViewModel> has no zero argument constructor
        at java.lang.Class.newInstance(Native Method)
        at androidx.lifecycle.ViewModelProvider$NewInstanceFactory.create(ViewModelProvider.kt:186)
        at androidx.lifecycle.ViewModelProvider$AndroidViewModelFactory.create(ViewModelProvider.kt:238) 
        at androidx.lifecycle.SavedStateViewModelFactory.create(SavedStateViewModelFactory.java:112) 
        at androidx.lifecycle.SavedStateViewModelFactory.create(SavedStateViewModelFactory.java:146) 
        at dagger.hilt.android.internal.lifecycle.HiltViewModelFactory.create(HiltViewModelFactory.java:111) 
        at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.kt:171) 
        at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.kt:139) 
        at androidx.lifecycle.ViewModelLazy.getValue(ViewModelLazy.kt:44) 
        at androidx.lifecycle.ViewModelLazy.getValue(ViewModelLazy.kt:31) 
        at com.miniproject.monthlies.ui.fragments.MenstrualFragment.getMViewModel(MenstrualFragment.kt:52) 
        at com.miniproject.monthlies.ui.fragments.MenstrualFragment.observeViewModel(MenstrualFragment.kt:127) 
        at com.miniproject.monthlies.ui.fragments.MenstrualFragment.onCreateView(MenstrualFragment.kt:72) 
        at androidx.fragment.app.Fragment.performCreateView(Fragment.java:2963) 
        at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:518) 
        at androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:282) 
        at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:2189) 
        at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:2106) 
        at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:2002) 
        at androidx.fragment.app.FragmentManager$5.run(FragmentManager.java:524) 
        at android.os.Handler.handleCallback(Handler.java:938) 
        at android.os.Handler.dispatchMessage(Handler.java:99) 
        at android.os.Looper.loop(Looper.java:255) 
        at android.app.ActivityThread.main(ActivityThread.java:8212) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:632) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1049)

mensTrualViewModel-

package com.miniproject.monthlies.ui.fragments.menstruation.menstrual

import android.content.Context
import androidx.lifecycle.MutableLiveData
import com.miniproject.monthlies.feature.mapper.MenstrualPeriodResumeMapper
import com.google.firebase.firestore.ktx.toObject
import com.miniproject.monthlies.data.firebase.FirebaseUtil
import com.miniproject.monthlies.data.model.menstrual.MenstrualPeriodMonthly
import com.miniproject.monthlies.data.model.menstrual.MenstrualPeriodResume
import com.miniproject.monthlies.data.remote.RemoteRepository
import com.miniproject.monthlies.feature.model.menstrual.MenstrualPeriodMonthlyIntent
import com.miniproject.monthlies.feature.model.menstrual.MenstrualPeriodResumeIntent
import com.miniproject.monthlies.ui.activities.base.BaseFirebaseListener
import com.miniproject.monthlies.ui.activities.base.BaseViewModel
import com.miniproject.monthlies.util.Const
import dagger.hilt.android.lifecycle.HiltViewModel
import dagger.hilt.android.qualifiers.ApplicationContext
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import java.text.SimpleDateFormat
import java.util.*
import javax.inject.Inject

//@HiltViewModel
class MenstrualViewModel @Inject constructor(
    val firebaseUtil: FirebaseUtil,
    private val repository: RemoteRepository,
) : BaseViewModel() {
//private val sharePreferenceUtil: SharePreferenceUtil,
    //@ApplicationContext private val application: Context
//class MenstrualViewModel(private val repository: Repository): ViewModel() {
    private val menstrualPeriodResumeMapper = MenstrualPeriodResumeMapper.getInstance()

    var activeYear = ""

    var activeYearData: MenstrualPeriodMonthlyIntent? = null

    var maxCycleLong = 0
    var minCycleLong = 0
    var periodLong = 0
    var activeMonth = 0

    val progressGetMenstrualRecord = MutableLiveData<Boolean>()
    val successGetMenstrualRecord = MutableLiveData<MenstrualPeriodMonthlyIntent>()
    val errorGetMenstrualRecord = MutableLiveData<String>()
    fun getMenstrualPeriod(year: String){
        CoroutineScope(Dispatchers.IO).launch {
            try {
                progressGetMenstrualRecord.postValue(true)
                val user = firebaseUtil.firebaseAuth.currentUser
                activeYear = year
                periodLong = 0
                activeMonth = 0
                firebaseUtil.fireStoreDb
                    .collection(Const.COLLECTION_MENSTRUAL_PERIOD)
                    .document(user?.uid?:"")
                    .collection(activeYear)
                    .get()
                    .addOnSuccessListener {result ->
                        val menstrualPeriodMonthly = MenstrualPeriodMonthlyIntent()
                        if (!result.isEmpty){
                            for (querySnapshot in result){

                                val data = querySnapshot?.toObject<MenstrualPeriodResumeIntent>()

                                if (data != null){
                                    if (maxCycleLong == 0 && minCycleLong == 0){
                                        maxCycleLong = data.longCycle
                                        minCycleLong = data.longCycle
                                    }
                                    if (data.longCycle > maxCycleLong){
                                        maxCycleLong = data.longCycle
                                    }
                                    if (data.longCycle < minCycleLong){
                                        minCycleLong = data.longCycle
                                    }
                                    periodLong += data.longPeriod
                                    activeMonth++
                                }

                                when (querySnapshot.id){
                                    Const.KEY_JAN -> { menstrualPeriodMonthly.jan = data }
                                    Const.KEY_FEB -> { menstrualPeriodMonthly.feb = data }
                                    Const.KEY_MAR -> { menstrualPeriodMonthly.mar = data }
                                    Const.KEY_APR -> { menstrualPeriodMonthly.apr = data }
                                    Const.KEY_MAY -> { menstrualPeriodMonthly.may = data }
                                    Const.KEY_JUN -> { menstrualPeriodMonthly.jun = data }
                                    Const.KEY_JUL -> { menstrualPeriodMonthly.jul = data }
                                    Const.KEY_AUG -> { menstrualPeriodMonthly.aug = data }
                                    Const.KEY_SEP -> { menstrualPeriodMonthly.sep = data }
                                    Const.KEY_OCT -> { menstrualPeriodMonthly.oct = data }
                                    Const.KEY_NOV -> { menstrualPeriodMonthly.nov = data }
                                    Const.KEY_DEC -> { menstrualPeriodMonthly.dec = data }
                                }
                            }
                            periodLong /= activeMonth
                        }
                        progressGetMenstrualRecord.postValue(false)
                        successGetMenstrualRecord.postValue(menstrualPeriodMonthly)
                    }
                    .addOnFailureListener {exception ->
                        progressGetMenstrualRecord.postValue(false)
                        errorGetMenstrualRecord.postValue(exception.message)
                    }
            }catch (e: Exception){
                progressGetMenstrualRecord.postValue(false)
                errorGetMenstrualRecord.postValue(e.message)
            }
        }
    }

    val progressAddMenstrualRecord = MutableLiveData<Boolean>()
    val successAddMenstrualRecord = MutableLiveData<MenstrualPeriodResumeIntent>()
    val errorAddMenstrualRecord = MutableLiveData<String>()

    fun addMenstrualPeriod(menstrualPeriodResume: MenstrualPeriodResumeIntent, date: Date){
        val month = SimpleDateFormat("MMMM", Locale.US).format(date)
        addMenstrualResumeDataMonth(month, menstrualPeriodResume)
        CoroutineScope(Dispatchers.IO).launch {
            repository.addMenstrualPeriod(menstrualPeriodResumeMapper.mapFromIntent(menstrualPeriodResume)!!, object:
                BaseFirebaseListener<MenstrualPeriodResume> {
                override fun onLoading(isLoading: Boolean) {
                    progressAddMenstrualRecord.postValue(isLoading)
                }

                override fun onSuccess(data: MenstrualPeriodResume) {
                    successAddMenstrualRecord.postValue(menstrualPeriodResumeMapper.mapToIntent(data))
                }

                override fun onFailed(errorMessage: String) {
                    errorAddMenstrualRecord.postValue(errorMessage)
                }
            })
        }
    }

    fun getMenstrualResumeDataCurrentMonth(month: String): MenstrualPeriodResumeIntent? {
        return when (month){
            Const.KEY_JAN -> activeYearData?.jan
            Const.KEY_FEB -> activeYearData?.feb
            Const.KEY_MAR -> activeYearData?.mar
            Const.KEY_APR -> activeYearData?.apr
            Const.KEY_MAY -> activeYearData?.may
            Const.KEY_JUN -> activeYearData?.jun
            Const.KEY_JUL -> activeYearData?.jul
            Const.KEY_AUG -> activeYearData?.aug
            Const.KEY_SEP -> activeYearData?.sep
            Const.KEY_OCT -> activeYearData?.oct
            Const.KEY_NOV -> activeYearData?.nov
            Const.KEY_DEC -> activeYearData?.dec
            else -> null
        }
    }

    private fun addMenstrualResumeDataMonth(month: String, data: MenstrualPeriodResumeIntent) {
        when (month){
            Const.KEY_JAN -> activeYearData?.jan = data
            Const.KEY_FEB -> activeYearData?.feb = data
            Const.KEY_MAR -> activeYearData?.mar = data
            Const.KEY_APR -> activeYearData?.apr = data
            Const.KEY_MAY -> activeYearData?.may = data
            Const.KEY_JUN -> activeYearData?.jun = data
            Const.KEY_JUL -> activeYearData?.jul = data
            Const.KEY_AUG -> activeYearData?.aug = data
            Const.KEY_SEP -> activeYearData?.sep = data
            Const.KEY_OCT -> activeYearData?.oct = data
            Const.KEY_NOV -> activeYearData?.nov = data
            Const.KEY_DEC -> activeYearData?.dec = data
        }
    }
}

2中存在于logcat IE中的事物IE中存在“无法创建一个viewModel的实例“和“ ViewModel没有零参数构造器”。在这种情况下,该怎么办?

我最近进入了Android开发领域,所以我对下一步该做什么并不了解。

&nbsp;

When I'm visiting the application and once accessing this fragment(MenstrualFragment), the application crashes and this is displayed in the Logcat -

2022-06-23 15:44:59.110 11278-11278/com.miniproject.monthlies E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.miniproject.monthlies, PID: 11278
    java.lang.RuntimeException: Cannot create an instance of class com.miniproject.monthlies.ui.fragments.menstruation.menstrual.MenstrualViewModel
        at androidx.lifecycle.ViewModelProvider$NewInstanceFactory.create(ViewModelProvider.kt:188)
        at androidx.lifecycle.ViewModelProvider$AndroidViewModelFactory.create(ViewModelProvider.kt:238)
        at androidx.lifecycle.SavedStateViewModelFactory.create(SavedStateViewModelFactory.java:112)
        at androidx.lifecycle.SavedStateViewModelFactory.create(SavedStateViewModelFactory.java:146)
        at dagger.hilt.android.internal.lifecycle.HiltViewModelFactory.create(HiltViewModelFactory.java:111)
        at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.kt:171)
        at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.kt:139)
        at androidx.lifecycle.ViewModelLazy.getValue(ViewModelLazy.kt:44)
        at androidx.lifecycle.ViewModelLazy.getValue(ViewModelLazy.kt:31)
        at com.miniproject.monthlies.ui.fragments.MenstrualFragment.getMViewModel(MenstrualFragment.kt:52)
        at com.miniproject.monthlies.ui.fragments.MenstrualFragment.observeViewModel(MenstrualFragment.kt:127)
        at com.miniproject.monthlies.ui.fragments.MenstrualFragment.onCreateView(MenstrualFragment.kt:72)
        at androidx.fragment.app.Fragment.performCreateView(Fragment.java:2963)
        at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:518)
        at androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:282)
        at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:2189)
        at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:2106)
        at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:2002)
        at androidx.fragment.app.FragmentManager$5.run(FragmentManager.java:524)
        at android.os.Handler.handleCallback(Handler.java:938)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:255)
        at android.app.ActivityThread.main(ActivityThread.java:8212)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:632)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1049)
     Caused by: java.lang.InstantiationException: java.lang.Class<com.miniproject.monthlies.ui.fragments.menstruation.menstrual.MenstrualViewModel> has no zero argument constructor
        at java.lang.Class.newInstance(Native Method)
        at androidx.lifecycle.ViewModelProvider$NewInstanceFactory.create(ViewModelProvider.kt:186)
        at androidx.lifecycle.ViewModelProvider$AndroidViewModelFactory.create(ViewModelProvider.kt:238) 
        at androidx.lifecycle.SavedStateViewModelFactory.create(SavedStateViewModelFactory.java:112) 
        at androidx.lifecycle.SavedStateViewModelFactory.create(SavedStateViewModelFactory.java:146) 
        at dagger.hilt.android.internal.lifecycle.HiltViewModelFactory.create(HiltViewModelFactory.java:111) 
        at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.kt:171) 
        at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.kt:139) 
        at androidx.lifecycle.ViewModelLazy.getValue(ViewModelLazy.kt:44) 
        at androidx.lifecycle.ViewModelLazy.getValue(ViewModelLazy.kt:31) 
        at com.miniproject.monthlies.ui.fragments.MenstrualFragment.getMViewModel(MenstrualFragment.kt:52) 
        at com.miniproject.monthlies.ui.fragments.MenstrualFragment.observeViewModel(MenstrualFragment.kt:127) 
        at com.miniproject.monthlies.ui.fragments.MenstrualFragment.onCreateView(MenstrualFragment.kt:72) 
        at androidx.fragment.app.Fragment.performCreateView(Fragment.java:2963) 
        at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:518) 
        at androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:282) 
        at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:2189) 
        at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:2106) 
        at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:2002) 
        at androidx.fragment.app.FragmentManager$5.run(FragmentManager.java:524) 
        at android.os.Handler.handleCallback(Handler.java:938) 
        at android.os.Handler.dispatchMessage(Handler.java:99) 
        at android.os.Looper.loop(Looper.java:255) 
        at android.app.ActivityThread.main(ActivityThread.java:8212) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:632) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1049)

MenstrualViewModel-

package com.miniproject.monthlies.ui.fragments.menstruation.menstrual

import android.content.Context
import androidx.lifecycle.MutableLiveData
import com.miniproject.monthlies.feature.mapper.MenstrualPeriodResumeMapper
import com.google.firebase.firestore.ktx.toObject
import com.miniproject.monthlies.data.firebase.FirebaseUtil
import com.miniproject.monthlies.data.model.menstrual.MenstrualPeriodMonthly
import com.miniproject.monthlies.data.model.menstrual.MenstrualPeriodResume
import com.miniproject.monthlies.data.remote.RemoteRepository
import com.miniproject.monthlies.feature.model.menstrual.MenstrualPeriodMonthlyIntent
import com.miniproject.monthlies.feature.model.menstrual.MenstrualPeriodResumeIntent
import com.miniproject.monthlies.ui.activities.base.BaseFirebaseListener
import com.miniproject.monthlies.ui.activities.base.BaseViewModel
import com.miniproject.monthlies.util.Const
import dagger.hilt.android.lifecycle.HiltViewModel
import dagger.hilt.android.qualifiers.ApplicationContext
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import java.text.SimpleDateFormat
import java.util.*
import javax.inject.Inject

//@HiltViewModel
class MenstrualViewModel @Inject constructor(
    val firebaseUtil: FirebaseUtil,
    private val repository: RemoteRepository,
) : BaseViewModel() {
//private val sharePreferenceUtil: SharePreferenceUtil,
    //@ApplicationContext private val application: Context
//class MenstrualViewModel(private val repository: Repository): ViewModel() {
    private val menstrualPeriodResumeMapper = MenstrualPeriodResumeMapper.getInstance()

    var activeYear = ""

    var activeYearData: MenstrualPeriodMonthlyIntent? = null

    var maxCycleLong = 0
    var minCycleLong = 0
    var periodLong = 0
    var activeMonth = 0

    val progressGetMenstrualRecord = MutableLiveData<Boolean>()
    val successGetMenstrualRecord = MutableLiveData<MenstrualPeriodMonthlyIntent>()
    val errorGetMenstrualRecord = MutableLiveData<String>()
    fun getMenstrualPeriod(year: String){
        CoroutineScope(Dispatchers.IO).launch {
            try {
                progressGetMenstrualRecord.postValue(true)
                val user = firebaseUtil.firebaseAuth.currentUser
                activeYear = year
                periodLong = 0
                activeMonth = 0
                firebaseUtil.fireStoreDb
                    .collection(Const.COLLECTION_MENSTRUAL_PERIOD)
                    .document(user?.uid?:"")
                    .collection(activeYear)
                    .get()
                    .addOnSuccessListener {result ->
                        val menstrualPeriodMonthly = MenstrualPeriodMonthlyIntent()
                        if (!result.isEmpty){
                            for (querySnapshot in result){

                                val data = querySnapshot?.toObject<MenstrualPeriodResumeIntent>()

                                if (data != null){
                                    if (maxCycleLong == 0 && minCycleLong == 0){
                                        maxCycleLong = data.longCycle
                                        minCycleLong = data.longCycle
                                    }
                                    if (data.longCycle > maxCycleLong){
                                        maxCycleLong = data.longCycle
                                    }
                                    if (data.longCycle < minCycleLong){
                                        minCycleLong = data.longCycle
                                    }
                                    periodLong += data.longPeriod
                                    activeMonth++
                                }

                                when (querySnapshot.id){
                                    Const.KEY_JAN -> { menstrualPeriodMonthly.jan = data }
                                    Const.KEY_FEB -> { menstrualPeriodMonthly.feb = data }
                                    Const.KEY_MAR -> { menstrualPeriodMonthly.mar = data }
                                    Const.KEY_APR -> { menstrualPeriodMonthly.apr = data }
                                    Const.KEY_MAY -> { menstrualPeriodMonthly.may = data }
                                    Const.KEY_JUN -> { menstrualPeriodMonthly.jun = data }
                                    Const.KEY_JUL -> { menstrualPeriodMonthly.jul = data }
                                    Const.KEY_AUG -> { menstrualPeriodMonthly.aug = data }
                                    Const.KEY_SEP -> { menstrualPeriodMonthly.sep = data }
                                    Const.KEY_OCT -> { menstrualPeriodMonthly.oct = data }
                                    Const.KEY_NOV -> { menstrualPeriodMonthly.nov = data }
                                    Const.KEY_DEC -> { menstrualPeriodMonthly.dec = data }
                                }
                            }
                            periodLong /= activeMonth
                        }
                        progressGetMenstrualRecord.postValue(false)
                        successGetMenstrualRecord.postValue(menstrualPeriodMonthly)
                    }
                    .addOnFailureListener {exception ->
                        progressGetMenstrualRecord.postValue(false)
                        errorGetMenstrualRecord.postValue(exception.message)
                    }
            }catch (e: Exception){
                progressGetMenstrualRecord.postValue(false)
                errorGetMenstrualRecord.postValue(e.message)
            }
        }
    }

    val progressAddMenstrualRecord = MutableLiveData<Boolean>()
    val successAddMenstrualRecord = MutableLiveData<MenstrualPeriodResumeIntent>()
    val errorAddMenstrualRecord = MutableLiveData<String>()

    fun addMenstrualPeriod(menstrualPeriodResume: MenstrualPeriodResumeIntent, date: Date){
        val month = SimpleDateFormat("MMMM", Locale.US).format(date)
        addMenstrualResumeDataMonth(month, menstrualPeriodResume)
        CoroutineScope(Dispatchers.IO).launch {
            repository.addMenstrualPeriod(menstrualPeriodResumeMapper.mapFromIntent(menstrualPeriodResume)!!, object:
                BaseFirebaseListener<MenstrualPeriodResume> {
                override fun onLoading(isLoading: Boolean) {
                    progressAddMenstrualRecord.postValue(isLoading)
                }

                override fun onSuccess(data: MenstrualPeriodResume) {
                    successAddMenstrualRecord.postValue(menstrualPeriodResumeMapper.mapToIntent(data))
                }

                override fun onFailed(errorMessage: String) {
                    errorAddMenstrualRecord.postValue(errorMessage)
                }
            })
        }
    }

    fun getMenstrualResumeDataCurrentMonth(month: String): MenstrualPeriodResumeIntent? {
        return when (month){
            Const.KEY_JAN -> activeYearData?.jan
            Const.KEY_FEB -> activeYearData?.feb
            Const.KEY_MAR -> activeYearData?.mar
            Const.KEY_APR -> activeYearData?.apr
            Const.KEY_MAY -> activeYearData?.may
            Const.KEY_JUN -> activeYearData?.jun
            Const.KEY_JUL -> activeYearData?.jul
            Const.KEY_AUG -> activeYearData?.aug
            Const.KEY_SEP -> activeYearData?.sep
            Const.KEY_OCT -> activeYearData?.oct
            Const.KEY_NOV -> activeYearData?.nov
            Const.KEY_DEC -> activeYearData?.dec
            else -> null
        }
    }

    private fun addMenstrualResumeDataMonth(month: String, data: MenstrualPeriodResumeIntent) {
        when (month){
            Const.KEY_JAN -> activeYearData?.jan = data
            Const.KEY_FEB -> activeYearData?.feb = data
            Const.KEY_MAR -> activeYearData?.mar = data
            Const.KEY_APR -> activeYearData?.apr = data
            Const.KEY_MAY -> activeYearData?.may = data
            Const.KEY_JUN -> activeYearData?.jun = data
            Const.KEY_JUL -> activeYearData?.jul = data
            Const.KEY_AUG -> activeYearData?.aug = data
            Const.KEY_SEP -> activeYearData?.sep = data
            Const.KEY_OCT -> activeYearData?.oct = data
            Const.KEY_NOV -> activeYearData?.nov = data
            Const.KEY_DEC -> activeYearData?.dec = data
        }
    }
}

2 things are present in logcat i.e "cannot create an instance of ViewModel" and "ViewModel has no zero argument constructor". In this scenario, what should be done?

I recently came into the field of Android development so I'm not having much idea on what to do next.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

锦上情书 2025-02-16 18:04:42

这是因为您评论了@HiltViewModel

更改

//@HiltViewModel

@HiltViewModel

It's because you commented out @HiltViewModel.

Change

//@HiltViewModel

to

@HiltViewModel
惟欲睡 2025-02-16 18:04:42

我遇到了同样的错误。我的情况是我缺少@androidentrypoint的片段注释,该片段创建了ViewModel,您需要将ViewModel注释为@HiltViewModel。

I was having the same error. I my case I was missing @AndroidEntryPoint annotation in fragment that created the viewModel and you need to annotate your viewModel as @HiltViewModel.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文