Java 无法创建ViewModel类的实例

Java 无法创建ViewModel类的实例,java,android,mvvm,viewmodel,android-architecture-components,Java,Android,Mvvm,Viewmodel,Android Architecture Components,当我尝试运行我的应用程序时,它会因此logcat错误而崩溃。这个问题非常类似于和post,但所有提到的解决方案都不适用于我 当我搜索这个错误时,我发现这通常是因为ViewModelProvider已经过时,人们建议将新的ViewModelProvider与Factory类一起使用,但即使这样,我也没有成功 java.lang.RuntimeException:无法创建com.emirhalici.notetakingappnvvmexample.NoteViewModel类的实例 我看不出哪里会

当我尝试运行我的应用程序时,它会因此logcat错误而崩溃。这个问题非常类似于和post,但所有提到的解决方案都不适用于我

当我搜索这个错误时,我发现这通常是因为ViewModelProvider已经过时,人们建议将新的ViewModelProvider与Factory类一起使用,但即使这样,我也没有成功

java.lang.RuntimeException:无法创建com.emirhalici.notetakingappnvvmexample.NoteViewModel类的实例

我看不出哪里会有问题,如果我在某处或其他地方有一个小的语法错误。这让我发疯,因为我是一个初学者,正在努力学习Android架构组件。我正在追踪一个链接到youtube的播放列表,当他运行它时,他的代码运行得非常完美。请先看一下,然后再将其标记为副本。我在这里真是太深了。提前谢谢

logcat错误

    Process: com.emirhalici.notetakingappnvvmexample, PID: 17577
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.emirhalici.notetakingappnvvmexample/com.emirhalici.notetakingappnvvmexample.MainActivity}: java.lang.RuntimeException: Cannot create an instance of class com.emirhalici.notetakingappnvvmexample.NoteViewModel
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3449)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3601)
    at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85)
    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:2066)
    at android.os.Handler.dispatchMessage(Handler.java:106)
    at android.os.Looper.loop(Looper.java:223)
    at android.app.ActivityThread.main(ActivityThread.java:7656)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
 Caused by: java.lang.RuntimeException: Cannot create an instance of class com.emirhalici.notetakingappnvvmexample.NoteViewModel
    at androidx.lifecycle.ViewModelProvider$AndroidViewModelFactory.create(ViewModelProvider.java:275)
    at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.java:187)
    at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.java:150)
    at com.emirhalici.notetakingappnvvmexample.MainActivity.onCreate(MainActivity.java:26)
    at android.app.Activity.performCreate(Activity.java:8000)
    at android.app.Activity.performCreate(Activity.java:7984)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1309)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3422)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3601) 
    at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85) 
    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:2066) 
    at android.os.Handler.dispatchMessage(Handler.java:106) 
    at android.os.Looper.loop(Looper.java:223) 
    at android.app.ActivityThread.main(ActivityThread.java:7656) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947) 
 Caused by: java.lang.reflect.InvocationTargetException
    at java.lang.reflect.Constructor.newInstance0(Native Method)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:343)
    at androidx.lifecycle.ViewModelProvider$AndroidViewModelFactory.create(ViewModelProvider.java:267)
    at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.java:187) 
    at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.java:150) 
    at com.emirhalici.notetakingappnvvmexample.MainActivity.onCreate(MainActivity.java:26) 
    at android.app.Activity.performCreate(Activity.java:8000) 
    at android.app.Activity.performCreate(Activity.java:7984) 
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1309) 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3422) 
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3601) 
    at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85) 
    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:2066) 
    at android.os.Handler.dispatchMessage(Handler.java:106) 
    at android.os.Looper.loop(Looper.java:223) 
    at android.app.ActivityThread.main(ActivityThread.java:7656) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947) 
 Caused by: java.lang.RuntimeException: cannot find implementation for com.emirhalici.notetakingappnvvmexample.NoteDatabase. NoteDatabase_Impl does not exist
    at androidx.room.Room.getGeneratedImplementation(Room.java:97)
    at androidx.room.RoomDatabase$Builder.build(RoomDatabase.java:1358)
    at com.emirhalici.notetakingappnvvmexample.NoteDatabase.getInstance(NoteDatabase.java:25)
    at com.emirhalici.notetakingappnvvmexample.NoteRepository.<init>(NoteRepository.java:15)
    at com.emirhalici.notetakingappnvvmexample.NoteViewModel.<init>(NoteViewModel.java:19)
    at java.lang.reflect.Constructor.newInstance0(Native Method) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:343) 
    at androidx.lifecycle.ViewModelProvider$AndroidViewModelFactory.create(ViewModelProvider.java:267) 
    at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.java:187) 
    at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.java:150) 
    at com.emirhalici.notetakingappnvvmexample.MainActivity.onCreate(MainActivity.java:26) 
    at android.app.Activity.performCreate(Activity.java:8000) 
    at android.app.Activity.performCreate(Activity.java:7984) 
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1309) 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3422) 
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3601) 
    at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85) 
    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:2066) 
    at android.os.Handler.dispatchMessage(Handler.java:106) 
    at android.os.Looper.loop(Looper.java:223) 
    at android.app.ActivityThread.main(ActivityThread.java:7656) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947) 
NoteDao.java

public class MainActivity extends AppCompatActivity {
private NoteViewModel noteViewModel;

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

    // these didn't work
    //noteViewModel = new ViewModelProvider(this, ViewModelProvider.AndroidViewModelFactory.getInstance(this.getApplication())).get(NoteViewModel.class);
    //noteViewModel = new ViewModelProvider(this).get(NoteViewModel.class);
    //noteViewModel = ViewModelProviders.of(this).get(NoteViewModel.class);
    // i tried this but this don't work either
    noteViewModel = new ViewModelProvider(this,
            ViewModelProvider.AndroidViewModelFactory.getInstance(this.getApplication())).get(NoteViewModel.class);
    noteViewModel.getAllNotes().observe(this, new Observer<List<Note>>() {
        @Override
        public void onChanged(List<Note> notes) {
            // update RecyclerView
            Toast.makeText(MainActivity.this, "onChanged", Toast.LENGTH_SHORT).show();
        }
    });
} }
@Dao
public interface NoteDao {

@Insert
void insert(Note note);

@Update
void update(Note note);

@Delete
void delete(Note note);

@Query("DELETE FROM note_table")
void deleteAll();

@Query("SELECT * FROM note_table ORDER BY priority DESC")
LiveData<List<Note>> getAllNotes();

}
@Database(entities = Note.class, version = 1)
public abstract class NoteDatabase extends RoomDatabase {

private static NoteDatabase instance;

public abstract NoteDao noteDao();

public static synchronized NoteDatabase getInstance(Context context) {
    if (instance == null) {
        instance = Room.databaseBuilder(context.getApplicationContext(),
                NoteDatabase.class, "note_database")
                .fallbackToDestructiveMigration()
                .addCallback(roomCallback)
                .build();
    }
    return instance;
}

private static RoomDatabase.Callback roomCallback = new RoomDatabase.Callback() {
    @Override
    public void onCreate(@NonNull SupportSQLiteDatabase db) {
        super.onCreate(db);
        new PopulateDbAsyncTask(instance).execute();
    }
};

private static class PopulateDbAsyncTask extends AsyncTask<Void, Void, Void> {
    private NoteDao noteDao;
    private PopulateDbAsyncTask(NoteDatabase db) {
        noteDao = db.noteDao();
    }

    @Override
    protected Void doInBackground(Void... voids) {
        noteDao.insert(new Note("Title 1","Description 1", 1));
        noteDao.insert(new Note("Title 2","Description 2", 2));
        noteDao.insert(new Note("Title 3","Description 3", 3));
        noteDao.insert(new Note("Title 4","Description 4", 1));
        noteDao.insert(new Note("Title 5","Description 5", 2));
        noteDao.insert(new Note("Title 6","Description 6", 4));
        return null;
    }
}
}
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 update(Note note) {
    new UpdateNoteAsyncTask(noteDao).execute(note);
}

public void delete(Note note) {
    new DeleteNoteAsyncTask(noteDao).execute(note);
}

public void deleteAll() {
    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<Note, Void, Void> {
    private NoteDao noteDao;

    private DeleteAllNotesAsyncTask(NoteDao noteDao) {
        this.noteDao = noteDao;
    }

    @Override
    protected Void doInBackground(Note... voids) {
        noteDao.deleteAll();
        return null;
    }
}
}
public class NoteViewModel extends AndroidViewModel {
private NoteRepository repository;
private LiveData<List<Note>> allNotes;

public NoteViewModel(@NonNull Application application) {
    super(application);
    repository = new NoteRepository(application);
    allNotes = repository.getAllNotes();
}

public void insert(Note note) {
    repository.insert(note);
}

public void update(Note note) {
    repository.update(note);
}

public void delete(Note note) {
    repository.delete(note);
}

public void deleteAllNotes() {
    repository.deleteAll();
}

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

}
@Dao
公共接口NoteDao{
@插入
空白插入(注);
@更新
作废更新(注);
@删除
作废删除(注);
@查询(“从注释表中删除”)
void deleteAll();
@查询(“按优先级描述从注释表顺序中选择*)
LiveData getAllNotes();
}
NoteDatabase.java

public class MainActivity extends AppCompatActivity {
private NoteViewModel noteViewModel;

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

    // these didn't work
    //noteViewModel = new ViewModelProvider(this, ViewModelProvider.AndroidViewModelFactory.getInstance(this.getApplication())).get(NoteViewModel.class);
    //noteViewModel = new ViewModelProvider(this).get(NoteViewModel.class);
    //noteViewModel = ViewModelProviders.of(this).get(NoteViewModel.class);
    // i tried this but this don't work either
    noteViewModel = new ViewModelProvider(this,
            ViewModelProvider.AndroidViewModelFactory.getInstance(this.getApplication())).get(NoteViewModel.class);
    noteViewModel.getAllNotes().observe(this, new Observer<List<Note>>() {
        @Override
        public void onChanged(List<Note> notes) {
            // update RecyclerView
            Toast.makeText(MainActivity.this, "onChanged", Toast.LENGTH_SHORT).show();
        }
    });
} }
@Dao
public interface NoteDao {

@Insert
void insert(Note note);

@Update
void update(Note note);

@Delete
void delete(Note note);

@Query("DELETE FROM note_table")
void deleteAll();

@Query("SELECT * FROM note_table ORDER BY priority DESC")
LiveData<List<Note>> getAllNotes();

}
@Database(entities = Note.class, version = 1)
public abstract class NoteDatabase extends RoomDatabase {

private static NoteDatabase instance;

public abstract NoteDao noteDao();

public static synchronized NoteDatabase getInstance(Context context) {
    if (instance == null) {
        instance = Room.databaseBuilder(context.getApplicationContext(),
                NoteDatabase.class, "note_database")
                .fallbackToDestructiveMigration()
                .addCallback(roomCallback)
                .build();
    }
    return instance;
}

private static RoomDatabase.Callback roomCallback = new RoomDatabase.Callback() {
    @Override
    public void onCreate(@NonNull SupportSQLiteDatabase db) {
        super.onCreate(db);
        new PopulateDbAsyncTask(instance).execute();
    }
};

private static class PopulateDbAsyncTask extends AsyncTask<Void, Void, Void> {
    private NoteDao noteDao;
    private PopulateDbAsyncTask(NoteDatabase db) {
        noteDao = db.noteDao();
    }

    @Override
    protected Void doInBackground(Void... voids) {
        noteDao.insert(new Note("Title 1","Description 1", 1));
        noteDao.insert(new Note("Title 2","Description 2", 2));
        noteDao.insert(new Note("Title 3","Description 3", 3));
        noteDao.insert(new Note("Title 4","Description 4", 1));
        noteDao.insert(new Note("Title 5","Description 5", 2));
        noteDao.insert(new Note("Title 6","Description 6", 4));
        return null;
    }
}
}
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 update(Note note) {
    new UpdateNoteAsyncTask(noteDao).execute(note);
}

public void delete(Note note) {
    new DeleteNoteAsyncTask(noteDao).execute(note);
}

public void deleteAll() {
    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<Note, Void, Void> {
    private NoteDao noteDao;

    private DeleteAllNotesAsyncTask(NoteDao noteDao) {
        this.noteDao = noteDao;
    }

    @Override
    protected Void doInBackground(Note... voids) {
        noteDao.deleteAll();
        return null;
    }
}
}
public class NoteViewModel extends AndroidViewModel {
private NoteRepository repository;
private LiveData<List<Note>> allNotes;

public NoteViewModel(@NonNull Application application) {
    super(application);
    repository = new NoteRepository(application);
    allNotes = repository.getAllNotes();
}

public void insert(Note note) {
    repository.insert(note);
}

public void update(Note note) {
    repository.update(note);
}

public void delete(Note note) {
    repository.delete(note);
}

public void deleteAllNotes() {
    repository.deleteAll();
}

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

}
@数据库(实体=Note.class,版本=1)
公共抽象类NoteDatabase扩展了RoomDatabase{
私有静态数据库实例;
公共摘要NoteDao NoteDao();
公共静态同步NoteDatabase getInstance(上下文){
if(实例==null){
实例=Room.databaseBuilder(context.getApplicationContext(),
NoteDatabase.class,“note_数据库”)
.fallbackToDestructiveMigration()
.addCallback(roomCallback)
.build();
}
返回实例;
}
私有静态RoomDatabase.Callback roomCallback=新建RoomDatabase.Callback(){
@凌驾
public void onCreate(@NonNull SupportSQLiteDatabase db){
super.onCreate(db);
新填充的Basynctask(实例).execute();
}
};
私有静态类填充Basynctask扩展异步任务{
私人记事本;
私有填充的Basynctask(NoteDatabase db){
noteDao=db.noteDao();
}
@凌驾
受保护的空位背景(空位…空位){
注D.插入(新注(“标题1”,“说明1”,1));
注D.插入(新注(“标题2”,“说明2”,2));
注D.插入(新注(“标题3”,“说明3”,3));
注D.插入(新注(“标题4”,“说明4”,1));
注D.插入(新注(“标题5”,“说明5”,2));
注释D.插入(新注释(“标题6”、“说明6”和“4”);
返回null;
}
}
}
NoteRepository.java

public class MainActivity extends AppCompatActivity {
private NoteViewModel noteViewModel;

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

    // these didn't work
    //noteViewModel = new ViewModelProvider(this, ViewModelProvider.AndroidViewModelFactory.getInstance(this.getApplication())).get(NoteViewModel.class);
    //noteViewModel = new ViewModelProvider(this).get(NoteViewModel.class);
    //noteViewModel = ViewModelProviders.of(this).get(NoteViewModel.class);
    // i tried this but this don't work either
    noteViewModel = new ViewModelProvider(this,
            ViewModelProvider.AndroidViewModelFactory.getInstance(this.getApplication())).get(NoteViewModel.class);
    noteViewModel.getAllNotes().observe(this, new Observer<List<Note>>() {
        @Override
        public void onChanged(List<Note> notes) {
            // update RecyclerView
            Toast.makeText(MainActivity.this, "onChanged", Toast.LENGTH_SHORT).show();
        }
    });
} }
@Dao
public interface NoteDao {

@Insert
void insert(Note note);

@Update
void update(Note note);

@Delete
void delete(Note note);

@Query("DELETE FROM note_table")
void deleteAll();

@Query("SELECT * FROM note_table ORDER BY priority DESC")
LiveData<List<Note>> getAllNotes();

}
@Database(entities = Note.class, version = 1)
public abstract class NoteDatabase extends RoomDatabase {

private static NoteDatabase instance;

public abstract NoteDao noteDao();

public static synchronized NoteDatabase getInstance(Context context) {
    if (instance == null) {
        instance = Room.databaseBuilder(context.getApplicationContext(),
                NoteDatabase.class, "note_database")
                .fallbackToDestructiveMigration()
                .addCallback(roomCallback)
                .build();
    }
    return instance;
}

private static RoomDatabase.Callback roomCallback = new RoomDatabase.Callback() {
    @Override
    public void onCreate(@NonNull SupportSQLiteDatabase db) {
        super.onCreate(db);
        new PopulateDbAsyncTask(instance).execute();
    }
};

private static class PopulateDbAsyncTask extends AsyncTask<Void, Void, Void> {
    private NoteDao noteDao;
    private PopulateDbAsyncTask(NoteDatabase db) {
        noteDao = db.noteDao();
    }

    @Override
    protected Void doInBackground(Void... voids) {
        noteDao.insert(new Note("Title 1","Description 1", 1));
        noteDao.insert(new Note("Title 2","Description 2", 2));
        noteDao.insert(new Note("Title 3","Description 3", 3));
        noteDao.insert(new Note("Title 4","Description 4", 1));
        noteDao.insert(new Note("Title 5","Description 5", 2));
        noteDao.insert(new Note("Title 6","Description 6", 4));
        return null;
    }
}
}
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 update(Note note) {
    new UpdateNoteAsyncTask(noteDao).execute(note);
}

public void delete(Note note) {
    new DeleteNoteAsyncTask(noteDao).execute(note);
}

public void deleteAll() {
    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<Note, Void, Void> {
    private NoteDao noteDao;

    private DeleteAllNotesAsyncTask(NoteDao noteDao) {
        this.noteDao = noteDao;
    }

    @Override
    protected Void doInBackground(Note... voids) {
        noteDao.deleteAll();
        return null;
    }
}
}
public class NoteViewModel extends AndroidViewModel {
private NoteRepository repository;
private LiveData<List<Note>> allNotes;

public NoteViewModel(@NonNull Application application) {
    super(application);
    repository = new NoteRepository(application);
    allNotes = repository.getAllNotes();
}

public void insert(Note note) {
    repository.insert(note);
}

public void update(Note note) {
    repository.update(note);
}

public void delete(Note note) {
    repository.delete(note);
}

public void deleteAllNotes() {
    repository.deleteAll();
}

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

}
公共类记事本存储库{
私人记事本;
私有LiveData-allNotes;
公共记事本存储库(应用程序){
NoteDatabase=NoteDatabase.getInstance(应用程序);
noteDao=database.noteDao();
allNotes=noteDao.getAllNotes();
}
公共作废插入(注){
新建InsertNoteAsyncTask(noteDao)。执行(note);
}
公共作废更新(注){
新的UpdateNodeAsynctask(noteDao)。执行(note);
}
公共作废删除(注){
新建DeleteNoteAsyncTask(noteDao)。执行(note);
}
public void deleteAll(){
新建DeleteAllNotesAsyncTask(noteDao).execute();
}
公共LiveData getAllNotes(){
归还所有票据;
}
私有静态类InsertNoteAsyncTask扩展了AsyncTask{
私人记事本;
私有InsertNoteAsyncTask(notedaonotedao){
this.noteDao=noteDao;
}
@凌驾
受保护的空白背景(注…注){
注:插入(注[0]);
返回null;
}
}
私有静态类UpdateNotateSyncTask扩展异步任务{
私人记事本;
私有updateNodeAsynctask(NoteDao NoteDao){
this.noteDao=noteDao;
}
@凌驾
受保护的空白背景(注…注){
noteDao.update(notes[0]);
返回null;
}
}
私有静态类DeleteNoteAsyncTask扩展了AsyncTask{
私人记事本;
私有DeleteNoteAsyncTask(NoteDao-NoteDao){
this.noteDao=noteDao;
}
@凌驾
受保护的空白背景(注…注){
noteDao.delete(notes[0]);
返回null;
}
}
私有静态类DeleteAllNotesAsyncTask扩展异步任务{
私人记事本;
私有DeleteAllNotesAsyncTask(NoteDao NoteDao){
this.noteDao=noteDao;
}
@凌驾
受保护的空位背景(注…空位){
noteDao.deleteAll();
返回null;
}
}
}
NoteViewModel.java

public class MainActivity extends AppCompatActivity {
private NoteViewModel noteViewModel;

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

    // these didn't work
    //noteViewModel = new ViewModelProvider(this, ViewModelProvider.AndroidViewModelFactory.getInstance(this.getApplication())).get(NoteViewModel.class);
    //noteViewModel = new ViewModelProvider(this).get(NoteViewModel.class);
    //noteViewModel = ViewModelProviders.of(this).get(NoteViewModel.class);
    // i tried this but this don't work either
    noteViewModel = new ViewModelProvider(this,
            ViewModelProvider.AndroidViewModelFactory.getInstance(this.getApplication())).get(NoteViewModel.class);
    noteViewModel.getAllNotes().observe(this, new Observer<List<Note>>() {
        @Override
        public void onChanged(List<Note> notes) {
            // update RecyclerView
            Toast.makeText(MainActivity.this, "onChanged", Toast.LENGTH_SHORT).show();
        }
    });
} }
@Dao
public interface NoteDao {

@Insert
void insert(Note note);

@Update
void update(Note note);

@Delete
void delete(Note note);

@Query("DELETE FROM note_table")
void deleteAll();

@Query("SELECT * FROM note_table ORDER BY priority DESC")
LiveData<List<Note>> getAllNotes();

}
@Database(entities = Note.class, version = 1)
public abstract class NoteDatabase extends RoomDatabase {

private static NoteDatabase instance;

public abstract NoteDao noteDao();

public static synchronized NoteDatabase getInstance(Context context) {
    if (instance == null) {
        instance = Room.databaseBuilder(context.getApplicationContext(),
                NoteDatabase.class, "note_database")
                .fallbackToDestructiveMigration()
                .addCallback(roomCallback)
                .build();
    }
    return instance;
}

private static RoomDatabase.Callback roomCallback = new RoomDatabase.Callback() {
    @Override
    public void onCreate(@NonNull SupportSQLiteDatabase db) {
        super.onCreate(db);
        new PopulateDbAsyncTask(instance).execute();
    }
};

private static class PopulateDbAsyncTask extends AsyncTask<Void, Void, Void> {
    private NoteDao noteDao;
    private PopulateDbAsyncTask(NoteDatabase db) {
        noteDao = db.noteDao();
    }

    @Override
    protected Void doInBackground(Void... voids) {
        noteDao.insert(new Note("Title 1","Description 1", 1));
        noteDao.insert(new Note("Title 2","Description 2", 2));
        noteDao.insert(new Note("Title 3","Description 3", 3));
        noteDao.insert(new Note("Title 4","Description 4", 1));
        noteDao.insert(new Note("Title 5","Description 5", 2));
        noteDao.insert(new Note("Title 6","Description 6", 4));
        return null;
    }
}
}
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 update(Note note) {
    new UpdateNoteAsyncTask(noteDao).execute(note);
}

public void delete(Note note) {
    new DeleteNoteAsyncTask(noteDao).execute(note);
}

public void deleteAll() {
    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<Note, Void, Void> {
    private NoteDao noteDao;

    private DeleteAllNotesAsyncTask(NoteDao noteDao) {
        this.noteDao = noteDao;
    }

    @Override
    protected Void doInBackground(Note... voids) {
        noteDao.deleteAll();
        return null;
    }
}
}
public class NoteViewModel extends AndroidViewModel {
private NoteRepository repository;
private LiveData<List<Note>> allNotes;

public NoteViewModel(@NonNull Application application) {
    super(application);
    repository = new NoteRepository(application);
    allNotes = repository.getAllNotes();
}

public void insert(Note note) {
    repository.insert(note);
}

public void update(Note note) {
    repository.update(note);
}

public void delete(Note note) {
    repository.delete(note);
}

public void deleteAllNotes() {
    repository.deleteAll();
}

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

}
公共类NoteViewModel扩展了AndroidViewModel{
私人记事本储存库;
私有LiveData-allNotes;
public NoteViewModel(@NonNull应用程序){
超级(应用);
repository=新的NoteRepository(应用程序);
allNotes=repository.getAllNotes();
}
公共作废插入(注){
储存库。插入(注);
}
公共作废更新(注){
储存库。更新(注);
}
公共作废删除(注){
删除(注);
}
public void deleteAllNotes(){
repository.deleteAll();
}
公共LiveData getAllNotes(){
归还所有票据;
}
}

首先,让我说,
代码流入
是一个很好的学习来源,我经常使用他来帮助我积累知识,Codelabs也很好,Android开发团队经常更新。如果你刚开始学习,我建议你学习Kotlin而不是java,Kotlin是android的未来,并推荐android开发团队使用的语言

这是获取新或现有ViewModel的方式

NoteViewModel viewModel = new ViewModelProvider(this).get(NoteViewModel.class);
此项目不需要使用自定义ViewModel工厂。如果您是p,则只希望使用自定义ViewModel Factory