deepeshdm3434 Ответов: 1

Androidviewmodel дает ошибку : не удается создать экземпляр класса viewmodel не имеет конструктора нулевого аргумента


Я пытаюсь создать приложение для заметок и пытаюсь создать экземпляр своего класса Viewmodel, но он выдает ошибку. Поскольку мне нужен контекст , чтобы получить экземпляр моей базы данных комнат, я использую AndroidViewModel.
И все же он просит дать мне ошибку . Я новичок во всем этом , я думаю, что мне чего-то не хватает, любая помощь приветствуется.


// GIVING ERROR - не удается создать экземпляр класса viewmodel, не имеющий конструктора нулевого аргумента

noteViewModel = new ViewModelProvider(this).get(NoteViewModel.class);

ViewModel class
    
    public class NoteViewModel extends AndroidViewModel {
    
        NoteRepository noteRepository;
        private LiveData<List<NoteEntity>> allNotes;
    
        public NoteViewModel(Application application) {
            super(application);
            this.noteRepository= new NoteRepository(getApplication());
            allNotes= noteRepository.getAllNotes();
        }
    
    
    
        public void insert(NoteEntity noteEntity){
            noteRepository.insert(noteEntity);
        }
    
        public void update(NoteEntity noteEntity){
            noteRepository.update(noteEntity);
        }
    
        public void delete(NoteEntity noteEntity){
            noteRepository.delete(noteEntity);
        }
    
        public void deleteAll(){
            noteRepository.deleteAll();
        }
    
        public LiveData<List<NoteEntity>> getAllUserNotes(){
            return allNotes;
        }
    
    }




MainActivity.java

    public class MainActivity extends AppCompatActivity {
    
        Toolbar toolbar1;
        RecyclerView notes_recyclerView;
        NoteViewModel noteViewModel;
       private NoteAdapter noteAdapter;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            toolbar1 = findViewById(R.id.toolbar1);
            setSupportActionBar(toolbar1);
            noteAdapter = new NoteAdapter();
            notes_recyclerView = findViewById(R.id.notes_recyclerview);
            notes_recyclerView.setLayoutManager(new LinearLayoutManager(this));
            notes_recyclerView.setAdapter(noteAdapter);
    
            noteViewModel = new ViewModelProvider(this).get(NoteViewModel.class);
            noteViewModel.getAllUserNotes().observe(this, noteEntities -> {
                noteAdapter.setAllnotes(noteEntities);
                noteAdapter.notifyDataSetChanged();
                Log.d("TAG", "onCreate: DATA SET CHANGED INSIDE RECYCLERVIEW");
            });
    
        }
    
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
    
            getMenuInflater().inflate(R.menu.add_note_menu,menu);
            return super.onCreateOptionsMenu(menu);
        }
    
        @Override
        public boolean onOptionsItemSelected(@NonNull MenuItem item) {
    
            if (item.getItemId()==R.id.add_note_option){
    
                Intent intent = new Intent(MainActivity.this,NewNote.class);
                startActivity(intent);
                Toast.makeText(this, "Create Note !", Toast.LENGTH_SHORT).show();
            }
    
            return super.onOptionsItemSelected(item);
        }
    }


Что я уже пробовал:

Я попытался создать конструктор без аргументов , но опять же я не могу использовать getApplication() внутри super() конструктора, который нуждается в приложении.

1 Ответов

Рейтинг:
0

Richard MacCutchan

См. примечания в документации: ViewModelProvider |  Разработчики Android[^].