Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

984
Views
No se puede crear una instancia de viewmodel después de usar Hilt en Android

Aquí está mi clase AllFilesListViewModel .

 class AllFilesListViewModel @ViewModelInject constructor( private val pdfItemRepository: PdfItemRepository):ViewModel() { }

Aquí está la clase PdfItemRepository .

 @Singleton class PdfItemRepository @Inject constructor(private val pdfItemDao: PdfItemDao){ }

Para pdfItemDao . Creé un módulo llamado DatabaseModule . A continuación se muestra el código -

 @Module @InstallIn(ApplicationComponent::class) object DatabaseModule { @Provides fun provideDatabase(@ApplicationContext context: Context):AppDatabase{ return AppDatabase.getDataBase(context) } @Provides fun providePdfItemDao(database:AppDatabase):PdfItemDao{ return database.pdfItemDao() } }

Aquí está la clase de fragmento AllFilesFragment.kt donde estoy usando viewModel.

 @AndroidEntryPoint class AllFilesFragment:Fragment(){ private lateinit var binding:AllFilesFragmentBinding private val viewModel by viewModels<AllFilesListViewModel>() override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { binding = AllFilesFragmentBinding.inflate(inflater,container,false) context?: return binding.root initThings() subscribeUi() return binding.root } }

Aquí está el archivo logcat .

 06-19 19:22:20.203 23753-23753/com.emptysheet.pdfreader_autoscroll E/AndroidRuntime: FATAL EXCEPTION: main Process: com.emptysheet.pdfreader_autoscroll, PID: 23753 java.lang.RuntimeException: Cannot create an instance of class com.emptysheet.pdfreader_autoscroll.homeScreen.viewModel.AllFilesListViewModel at androidx.lifecycle.ViewModelProvider$NewInstanceFactory.create(ViewModelProvider.java:221) at androidx.lifecycle.ViewModelProvider$AndroidViewModelFactory.create(ViewModelProvider.java:278) at androidx.lifecycle.SavedStateViewModelFactory.create(SavedStateViewModelFactory.java:106) at androidx.hilt.lifecycle.HiltViewModelFactory.create(HiltViewModelFactory.java:69) at androidx.lifecycle.AbstractSavedStateViewModelFactory.create(AbstractSavedStateViewModelFactory.java:69) at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.java:185) at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.java:150) at androidx.lifecycle.ViewModelLazy.getValue(ViewModelProvider.kt:54) at androidx.lifecycle.ViewModelLazy.getValue(ViewModelProvider.kt:41) at com.emptysheet.pdfreader_autoscroll.homeScreen.AllFilesFragment.getViewModel(AllFilesFragment.kt) at com.emptysheet.pdfreader_autoscroll.homeScreen.AllFilesFragment.subscribeUi(AllFilesFragment.kt:72) at com.emptysheet.pdfreader_autoscroll.homeScreen.AllFilesFragment.onCreateView(AllFilesFragment.kt:64) at androidx.fragment.app.Fragment.performCreateView(Fragment.java:2698) at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:320) at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1187) at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1356) at androidx.fragment.app.FragmentManager.moveFragmentToExpectedState(FragmentManager.java:1434) at androidx.fragment.app.BackStackRecord.executeOps(BackStackRecord.java:442) at androidx.fragment.app.FragmentManager.executeOps(FragmentManager.java:2169) at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:1992) at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:1947) at androidx.fragment.app.FragmentManager.execSingleAction(FragmentManager.java:1818) at androidx.fragment.app.BackStackRecord.commitNow(BackStackRecord.java:297) at androidx.viewpager2.adapter.FragmentStateAdapter.placeFragmentInViewHolder(FragmentStateAdapter.java:341) at androidx.viewpager2.adapter.FragmentStateAdapter.onViewAttachedToWindow(FragmentStateAdapter.java:276) at androidx.viewpager2.adapter.FragmentStateAdapter.onViewAttachedToWindow(FragmentStateAdapter.java:67) at androidx.recyclerview.widget.RecyclerView.dispatchChildAttached(RecyclerView.java:7556) at androidx.recyclerview.widget.RecyclerView$5.addView(RecyclerView.java:860) at androidx.recyclerview.widget.ChildHelper.addView(ChildHelper.java:107) at androidx.recyclerview.widget.RecyclerView$LayoutManager.addViewInt(RecyclerView.java:8601) at androidx.recyclerview.widget.RecyclerView$LayoutManager.addView(RecyclerView.java:8559) at androidx.recyclerview.widget.RecyclerView$LayoutManager.addView(RecyclerView.java:8547) at androidx.recyclerview.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1641) at androidx.recyclerview.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1587) at androidx.recyclerview.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:665) at androidx.recyclerview.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:4134) at androidx.recyclerview.widget.RecyclerView.dispatchLayout(RecyclerView.java:3851) at androidx.recyclerview.widget.RecyclerView.onLayout(RecyclerView.java:4404) at android.view.View.layout(View.java:15689) at android.view.ViewGroup.layout(ViewGroup.java:5048) at androidx.viewpager2.widget.ViewPager2.onLayout(ViewPager2.java:527) at android.view.View.layout(View.java:15689) at android.view.ViewGroup.layout(ViewGroup.java:5048) at com.google.android.material.appbar.HeaderScrollingViewBehavior.layoutChild(HeaderScrollingViewBehavior.java:148) at com.google.android.material.appbar.V
over 4 years ago · Hanz Gallego
9 answers
Answer question

0

Esto se debe a una discrepancia de versión entre AndroidX Lifecycle, AndroidX Core, AndroidX Activity y AndroidX Fragment.

Hilt solo funciona si se puede anular getDefaultViewModelProviderFactory .

Esto solo es cierto si ese método realmente existe, lo que no ocurre si sus dependencias están desactualizadas. Es decir, su androidx.fragment es inferior a 1.2.0 y su actividad de androidx.activity es inferior a 1.1.0.

Usa esto y funcionará:

 implementation "androidx.appcompat:appcompat:1.1.0" implementation "androidx.fragment:fragment-ktx:1.2.5" implementation "androidx.core:core-ktx:1.3.0" implementation "androidx.activity:activity:1.1.0" implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.2.0" implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.2.0" implementation "androidx.lifecycle:lifecycle-runtime-ktx:2.2.0" implementation "androidx.lifecycle:lifecycle-viewmodel-savedstate:2.2.0"

Pero actualmente, esto es lo que hace que funcione para mí:

 implementation 'com.google.dagger:dagger:2.28' kapt 'com.google.dagger:dagger-compiler:2.28' // hilt implementation 'com.google.dagger:hilt-android:2.28-alpha' kapt 'com.google.dagger:hilt-android-compiler:2.28-alpha' kaptAndroidTest 'com.google.dagger:hilt-android-compiler:2.28-alpha' kaptTest 'com.google.dagger:hilt-android-compiler:2.28-alpha' implementation 'androidx.hilt:hilt-lifecycle-viewmodel:1.0.0-alpha01' kapt 'androidx.hilt:hilt-compiler:1.0.0-alpha01'

Junto con

 apply plugin: 'dagger.hilt.android.plugin'

Y

 classpath 'com.google.dagger:hilt-android-gradle-plugin:2.28-alpha'
over 4 years ago · Hanz Gallego Report

0

Esto se resolvió después de usar kapt 'androidx.hilt:hilt-compiler:1.0.0-alpha01' en build.gradle de la aplicación. Ya había agregado kapt "com.google.dagger:hilt-android-compiler:2.28-alpha" . Todavía no entendía la diferencia entre dos BTW. Si alguien sabe Por favor, explícamelo.

over 4 years ago · Hanz Gallego Report

0

Enfrenté este problema antes y lo solucioné pasando SavedStateHandle al constructor principal del modelo de vista.

 class AuthViewModel @ViewModelInject constructor(@Assisted private val savedState: SavedStateHandle) : ViewModel()
over 4 years ago · Hanz Gallego Report

0

Esto me sucede cuando uso Hilt, y la causa del problema fue que olvidé agregar la anotación @AndroidEntryPoint encima de la clase de fragmento. Tanto el fragmento como la actividad del anfitrión deben anotarse con esta anotación.

over 4 years ago · Hanz Gallego Report

0

Para aquellos que verificaron todas las soluciones anteriores y aún no funcionan, la verificación final es eliminar la carpeta Build y rebuild el proyecto, esto obligará al compilador a volver a crear el dependency graph de la daga debajo del capó.

En mi caso, he annotated mi actividad con @AndroidEntryPoint y todavía tengo el mismo problema. Eliminé mi carpeta de build y rebuild el proyecto y funciona como se esperaba.

over 4 years ago · Hanz Gallego Report

0

@ViewModelInject está obsoleto en la versión de empuñadura más nueva

Referencia

Usar HiltViewModel

 @HiltViewModel class AllFilesListViewModel @Inject constructor( val pdfItemRepository: PdfItemRepository) ) : ViewModel() { }
over 4 years ago · Hanz Gallego Report

0

En alpha03, use el nuevo @HiltViewModel y el @Inject normal ahora como se muestra a continuación.

 @HiltViewModel class MyViewModel @Inject constructor( private val repository: Repository, private val savedStateHandle: SavedStateHandle ) : ViewModel(), LifecycleObserver { // Some code }
over 4 years ago · Hanz Gallego Report

0

También me he enfrentado a este problema hoy, probé todas las posibles soluciones sugeridas, pero fue imposible eliminar el error. Solo publico mi solución aquí en caso de que alguien tenga el mismo problema en el futuro.

En mi caso, tengo un proyecto de varios módulos, con 'módulo UI', 'módulo ViewModel' y 'módulo de casos de uso'. El error de mi parte fue que no estaba importando todos los módulos en el módulo gradle de la aplicación, solo estaba importando el módulo UI. Encontré esta nota en el sitio web de desarrolladores de Android con respecto a la implementación de la empuñadura:

Nota: Debido a que la generación de código de Hilt necesita acceso a todos los módulos de Gradle que usan Hilt, el módulo de Gradle que compila su clase de aplicación también necesita tener todos sus módulos de Hilt y clases inyectadas por el constructor en sus dependencias transitivas.

Cuando importé todos los módulos que se necesitaban para generar el gráfico DI, este bloqueo desapareció.

over 4 years ago · Hanz Gallego Report

0

Cuando uso Jetpack Compose, Hilt y Compose Navigation, mi enfoque es obtener todas las dependencias en los documentos y asegurarme de que todas sus versiones estén actualizadas. La clave es cuando crea ViewModel, no debe usar = viewModel() porque tiene que usar Compose Navigation, = hiltViewModel() debe usarse en su lugar.

over 4 years ago · Hanz Gallego Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!