Я пробовал руки на архитектуре MVVM, я реализовал все необходимые классы и методы.При создании объекта класса ViewModel в MainActivity я получил эту ошибку java.lang.RuntimeException: Cannot create an instance of class com.prathameshmore.getnotes.viewmodel.NoteViewModel
.
. Я пробовал этот пример из учебника YouTube.Я сделал все реализации правильно.Я пытался сделать класс и конструктор ViewModel общедоступными, но все же приложение зависало во время выполнения.
MainActivity.java
public class MainActivity extends AppCompatActivity {
private NoteViewModel noteViewModel;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
noteViewModel = ViewModelProviders.of(this).get(NoteViewModel.class);
noteViewModel.getAllNotes().observe(this, new Observer<List<Note>>() {
@Override
public void onChanged(List<Note> notes) {
Toast.makeText(MainActivity.this, "Updated", Toast.LENGTH_SHORT).show();
}
});
}
}
NoteViewModel.java
public class NoteViewModel extends AndroidViewModel {
private NoteRepository noteRepository;
private LiveData<List<Note>> allNotes;
public NoteViewModel(@NonNull Application application) {
super(application);
noteRepository = new NoteRepository(application);
allNotes = noteRepository.getAllNotes();
}
public void insert(Note note) {
noteRepository.insert(note);
}
public void update(Note note) {
noteRepository.update(note);
}
public void delete(Note note) {
noteRepository.delete(note);
}
public void deleteAllNotes() {
noteRepository.deleteAllNotes();
}
public LiveData<List<Note>> getAllNotes() {
return allNotes;
}
}
NoteRepository.java
public class NoteRepository {
private NoteDao noteDao;
private LiveData<List<Note>> allNotes;
public NoteRepository(Application application) {
NoteDatabase database = NoteDatabase.getInstance(application);
noteDao = database.noteDao();
allNotes = noteDao.getAllNotes();
}
public void insert(Note note){
new InsertNoteAsyncTask(noteDao).execute(note);
}
public void delete(Note note) {
new DeleteNoteAsyncTask(noteDao).execute(note);
}
public void update(Note note) {
new UpdateNoteAsyncTask(noteDao).execute(note);
}
public void deleteAllNotes() {
new DeleteAllNotesAsyncTask(noteDao).execute();
}
public LiveData<List<Note>> getAllNotes() {
return allNotes;
}
private static class InsertNoteAsyncTask extends AsyncTask<Note, Void, Void> {
private NoteDao noteDao;
private InsertNoteAsyncTask(NoteDao noteDao) {
this.noteDao = noteDao;
}
@Override
protected Void doInBackground(Note...notes) {
noteDao.insert(notes[0]);
return null;
}
}
private static class UpdateNoteAsyncTask extends AsyncTask<Note, Void, Void> {
private NoteDao noteDao;
private UpdateNoteAsyncTask(NoteDao noteDao) {
this.noteDao = noteDao;
}
@Override
protected Void doInBackground(Note...notes) {
noteDao.update(notes[0]);
return null;
}
}
private static class DeleteNoteAsyncTask extends AsyncTask<Note, Void, Void> {
private NoteDao noteDao;
private DeleteNoteAsyncTask(NoteDao noteDao) {
this.noteDao = noteDao;
}
@Override
protected Void doInBackground(Note...notes) {
noteDao.delete(notes[0]);
return null;
}
}
private static class DeleteAllNotesAsyncTask extends AsyncTask<Void, Void, Void> {
private NoteDao noteDao;
private DeleteAllNotesAsyncTask(NoteDao noteDao) {
this.noteDao = noteDao;
}
@Override
protected Void doInBackground(Void...voids) {
noteDao.deleteAllNotes();
return null;
}
}
}
Журнал
E / AndroidRuntime: FATAL EXCEPTION: main Процесс: com.prathameshmore.getnotes, PID: 28833 java.lang.RuntimeException: Невозможно запустить действие ComponentInfo {com.prathameshmore.getnotes / com.prathameshmore.getnotes.views.MainActivity}: java.lang.RuntimeException: невозможно создать экземпляр класса com.prathameshmore.getnotes.viewmodel.NoteViewModel в android.app.ActivityThread.performLaunchjava Activity (: 2723) в android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2784) в android.app.ActivityThread.-wrap12 (ActivityThread.java) в android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1523) вandroid.os.Handler.dispatchMessage (Handler.java:102) в android.os.Looper.loop (Looper.java:163) в android.app.ActivityThread.main (ActivityThread.java:6238) в java.lang.reflect.Method.invoke (собственный метод) в com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:904) в com.android.internal.os.ZygoteInit.main (ZygoteInit.java:794) Вызывается: java.lang.RuntimeException: не удается создать экземпляр класса com.prathameshmore.getnotes.viewmodel.NoteViewModel в androidx.lifecycle.ViewModelProvider $ AndroidViewModelFate.View $ AndroidViewModelFate.View (AndroidViewModelFate.View. $).java: 208) на androidx.lifecycle.ViewModelProvider.get (ViewModelProvider.java:135) на androidx.lifecycle.ViewModelProvider.get (ViewModelProvider.java:103) на com.prathameshmore.getnotes.views.MainActivity.onCreateJava: 25) в android.app.Activity.performCreate (Activity.java:6868) в android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1119) в android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2676) вandroid.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2784) в android.app.ActivityThread.-wrap12 (ActivityThread.java) в android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1523) в android.os.Handler.dispatchMessage (Handler.java:102) в android.os.Looper.loop (Looper.java:163) в android.app.ActivityThread.main (ActivityThread.java:6238) в java.lang.reflect.Method.invoke (собственный метод) в com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:904) в com.android.internal.os.ZygoteInit.main (ZygoteInit.java:794) Вызывается: java.lang.reflect.InvocationTargetException в java.lang.reflect.Constructor.newInstance0 (собственный метод в)java.lang.reflect.Constructor.newInstance (Constructor.java:430) в androidx.lifecycle.ViewModelProvider $ AndroidViewModelFactory.create (ViewModelProvider.java:200) в androidx.lifecycle.ViewModelProvider.get (ViewModelProvide )35 (ViewModelProvide) 351.lifecycle.ViewModelProvider.get (ViewModelProvider.java:103) в com.prathameshmore.getnotes.views.MainActivity.onCreate (MainActivity.java:25) в android.app.Activity.performCreate (Activity.java:6868) в android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1119) в android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2676) в android.app.ActivityThread.handleLaunchActivity (ActivityThread.readjj): 2784) в иroid.app.ActivityThread.-wrap12 (ActivityThread.java)
на android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1523)
на android.os.Handler.dispatchMessage (Handler.java:102)
на android.os.Looper.loop (Looper.java:163)
на android.app.ActivityThread.main (ActivityThread.java:6238)
в java.lang.reflect.Method.invoke (родной метод)
на com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:904)
на com.android.internal.os.ZygoteInit.main (ZygoteInit.java:794)
Причина: java.lang.RuntimeException: не удается найти реализацию для com.prathameshmore.getnotes.database.NoteDatabase.
NoteDatabase_Impl не существует
на androidx.room.Room.getGeneratedImplementation (Room.java:94)
на androidx.room.RoomDatabase $ Builder.build (RoomDatabase.java:851)
в com.prathameshmore.getnotes.database.NoteDatabase.getInstance (NoteDatabase.java:31)
в com.prathameshmore.getnotes.repository.NoteRepository. (NoteRepository.java:20)
в com.prathameshmore.getnotes.viewmodel.NoteViewModel. (NoteViewModel.java:21)
в java.lang.reflect.Constructor.newInstance0 (собственный метод)
в java.lang.reflect.Constructor.newInstance (Constructor.java:430)
на androidx.lifecycle.ViewModelProvider $ AndroidViewModelFactory.create (ViewModelProvider.java:200)
на androidx.lifecycle.ViewModelProvider.get (ViewModelProvider.java:135)
на androidx.lifecycle.ViewModelProvider.get (ViewModelProvider.java:103)
в com.prathameshmore.getnotes.views.MainActivity.onCreate (MainActivity.java:25)
на android.app.Activity.performCreate (Activity.java:6868)
на android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1119)
на android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2676)
на android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2784)
на android.app.ActivityThread.-wrap12 (ActivityThread.java)
на android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1523)
на android.os.Handler.dispatchMessage (Handler.java:102)
на android.os.Looper.loop (Looper.java:163)
на android.app.ActivityThread.main (ActivityThread.java:6238)
в java.lang.reflect.Method.invoke (родной метод)
на com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:904)
на com.android.internal.os.ZygoteInit.main (ZygoteInit.java:794)
Приложение прекращено.