tutorial patterns livedata example android mvvm architecture-components

android - patterns - No se puede crear una instancia de la clase ViewModel



mvvm android (7)

Estoy tratando de escribir una aplicación de muestra con componentes de la arquitectura de Android y, incluso después de intentarlo durante días, no pude hacer que funcionara. Me da la excepción anterior.

Propietario del ciclo de vida: -

public class MainActivity extends LifecycleActivity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); TextView textView = findViewById(R.id.tv_user); PostViewModel viewModel = ViewModelProviders.of(this).get(PostViewModel.class); viewModel.loadPosts(); viewModel.getPost().observe(this, new Observer<Post>() { @Override public void onChanged(@Nullable Post post) { if(post != null) { textView.setText(post.toString()); } } }); } }

ViewModel: -

public class PostViewModel extends ViewModel { private MediatorLiveData<Post> post; private PostRepository postRepo; PostViewModel() { post = new MediatorLiveData<>(); postRepo = new PostRepository(); } public LiveData<Post> loadPosts() { post.addSource(postRepo.getPost(), post -> this.post.setValue(post) ); return post; } @NonNull public LiveData<Post> getPost() { return post; } }


  1. Principalmente, Solution está haciendo que Class y Constructor Public sean las otras respuestas.
  2. También puede ser un error de tiempo de ejecución, compruebe los registros de errores de Logcat si hay varias causas enumeradas.

Asegúrese de que su ViewModel tenga un constructor con un solo parámetro, es decir, Application .

ejemplo:

public YourViewModel(Application application) { super(application); ...


Hacer pública la clase y el constructor resuelve mi problema.


Hay pocas razones para lanzar la excepción. He mencionado algunos de ellos.

  1. Asegúrate de que tu vista Modelo de clase sea pública
  2. Asegúrate de que el constructor de tu modelo de vista sea público

  3. Asegúrese de haber agregado la dependencia en su archivo grid para el ciclo de vida también si utiliza la sala y otras librerías que ha agregado.

  4. Si crea un objeto, cualquier otra clase dependiente en su constructor de clase de modelo de vista. Otra clase puede lanzar un error para crear la instancia de viewModel

Haz tu constructor public .


No fue del todo obvio para mí, pero al obtener este error lo resolví creando un constructor público. Mi constructor se derivó de los ejemplos de desarrolladores de Android y contenía el Repositorio como un parámetro. La creación de un constructor adicional que estaba vacío sin parámetros y hacer que se resolviera el problema se solucionó.

es decir, en tu caso

public PostViewModel() {}


Si está utilizando Kotlin asegúrese de reemplazar cualquier build.gradle annotationProcessor en build.gradle con kapt .

Me gusta:

annotationProcessor "android.arch.persistence.room:compiler:$rootProject.roomVersion"

Se convertirá

kapt "android.arch.persistence.room:compiler:$rootProject.roomVersion"

y añadir

apply plugin: ''kotlin-kapt'' encima del archivo buidl.gradle .

Procesamiento de anotaciones con Kotlin