Невозможно создать экземпляр моего класса модели android представления - PullRequest
0 голосов
/ 11 июля 2020

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

это моя активность

public class MainActivity extends AppCompatActivity {

private NoteViewModel noteViewModel;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    noteViewModel = new ViewModelProvider(this).get(NoteViewModel.class);
    noteViewModel.getAllNotes().observe(this, new Observer<List<Note>>() {
        @Override
        public void onChanged(List<Note> notes) {
            Toast.makeText(MainActivity.this, "onChanged()", Toast.LENGTH_SHORT).show();
        }
    });
}
}

и это моя модель просмотра

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.deleteAll();
}

public LiveData<List<Note>> getAllNotes() {
    return allNotes;
}
}

Это моя ошибка

Process: com.amehrvarz.architectureexample, PID: 25944
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.amehrvarz.architectureexample/com.amehrvarz.architectureexample.MainActivity}: java.lang.RuntimeException: Cannot create an instance of class com.amehrvarz.architectureexample.NoteViewModel
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3270)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3409)
    at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)
    at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
    at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2016)
    at android.os.Handler.dispatchMessage(Handler.java:107)
    at android.os.Looper.loop(Looper.java:214)
    at android.app.ActivityThread.main(ActivityThread.java:7356)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
 Caused by: java.lang.RuntimeException: Cannot create an instance of class com.amehrvarz.architectureexample.NoteViewModel
    at androidx.lifecycle.ViewModelProvider$NewInstanceFactory.create(ViewModelProvider.java:221)
    at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.java:187)
    at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.java:150)
    at com.amehrvarz.architectureexample.MainActivity.onCreate(MainActivity.java:23)

1 Ответ

1 голос
/ 11 июля 2020

Инициализировать ViewModel следующим образом. Вам также необходимо передать ViewModelFactory с конструктором ViewModelProvider.

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

Надеюсь, это поможет .......

...