我的ViewModel类是Java,我的Activity类在Kotlin中 . 我收到了错误
09-18 14:01:32.737 14082-14082 / com.meme.archcompwordlist E / AndroidRuntime:FATAL EXCEPTION:main进程:com.meme.archcompwordlist,PID:14082 java.lang.RuntimeException:无法启动活动ComponentInfo {com .meme.archcompwordlist / com.meme.archcompwordlist.MainActivity}:java.lang.RuntimeException:无法在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2665)的android下创建类com.meme.archcompwordlist.WordViewModel的实例位于android.app.Handler的android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1477)的android.app.ActivityThread.-wrap12(ActivityThread.java)上的.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726) .dispatchMessage(Handler.java:102)位于android.app.Looper.loop(Looper.java:154)的android.app.ActivityThread.main(ActivityThread.java:6119),位于java.lang.reflect.Method.invoke(本地方法)在com.android.internal.os.ZygoteInit的com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:886) . main(ZygoteInit.java:776)引起:java.lang.RuntimeException:无法在android.arch.lifecycle.ViewModelProvider $ AndroidViewModelFactory.create(ViewModelProvider.java:207)处创建类com.meme.archcompwordlist.WordViewModel的实例android.arch.lifecycle.ViewModelProvider.get(ViewModelProvider.java:134)位于android.arch.lifecycle.ViewModelProvider.get(ViewModelProvider.java:102)的com.meme.archcompwordlist.MainActivity.onCreate(MainActivity.kt:37)在android.app.A活动中的android.app.Asetrumentation.callActivityCnate(Instrumentation.java:1118)上的android.app.A活动,活动开发活动(ActivityThread.java:2618)上的android.app.Activity.performCreate(Activity.java:6679) . Activity.Thread.handleLaunchActivity(ActivityThread.java:2726)位于android.app.Handler.dispatchMessage的android.app.ActivityThread.-wrap12(ActivityThread.java)android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1477) Handler.java:102)在android.a.Looper.loop(Looper.java:154)android.a pp.ActivityThread.main(ActivityThread.java:6119)at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:886)at com的java.lang.reflect.Method.invoke(Native Method) . android.internal.os.ZygoteInit.main(ZygoteInit.java:776)由java.lang.reflect.Constructor.newInstance中java.lang.reflect.Constructor.newInstance0(Native Method)的java.lang.reflect.InvocationTargetException引起(Constructor.java:430)位于android.arch.life循环的android.arch.lifecycle.ViewModelProvider $ AndroidViewModelFactory.create(ViewModelProvider.java:199)android.arch.lifecycle.ViewModelProvider.get(ViewModelProvider.java:134) . 位于android.app.Instrumentation.callActivityOnCreate的android.app.Activity.performCreate(Activity.java:6679)的com.meme.archcompwordlist.MainActivity.onCreate(MainActivity.kt:37)中的ViewModelProvider.get(ViewModelProvider.java:102) (Instrumentation.java:1118)在android.app.ActivityThread的android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2618) . handleLaunchActivity(ActivityThread.java:2726)位于Android.app.Handler.dispatchMessage(处理程序 . )的android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1477)上的android.app.ActivityThread.-wrap12(ActivityThread.java) . java:102)在android.app.Looper.loop(Looper.java:154)的android.app.ActivityThread.main(ActivityThread.java:6119)at java.lang.reflect.Method.invoke(Native Method)at com .android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:886)at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)引起:java.lang.RuntimeException:找不到实现for com.meme.archcompwordlist.room.WordRoomDatabase . Word.RoomDatabase_Impl不存在于android.arch.persistence.room.Room.getGeneratedImplementation(Room.java:93)的android.arch.persistence.room.RoomDatabase $ Builder.build(RoomDatabase.java:630)com.meme.archcompwordlist .room.WordRoomDatabase.getRoomDatabase(WordRoomDatabase.java:22)位于com.meme.archcompwordlist.WordRepository . (WordRepository.java:21),位于java.lang的com.meme.archcompwordlist.WordViewModel . (WordViewModel.java:22) . 位于android.arch的android.arch.lifecycle.ViewModelProvider $ AndroidViewModelFactory.create(ViewModelProvider.java:199)的java.lang.reflect.Constructor.newInstance(Constructor.java:430)中的reflect.Constructor.newInstance0(Native Method) . android.appme.archcompa上的com.meme.archcompword.MainActivity.onCreate(MainActivity.kt:37)中的android.arch.lifecycle.ViewModelProvider.get(ViewModelProvider.java:102)生命周期.ViewModelProvider.get(ViewModelProvider.java:134) .Activity.performCreate(Activity.java:6679)在android.app.Instrumentation.callActivityOnCreate(Instrume) ntation.java:1118)在android.app.ActivityThread.perleLaunchActivity(ActivityThread.java:2618)的android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726)at atandroid.app.A活动中的android.app.ActivityThread.-wrap12(ActivityThread.java)在Android.os上的android.app.Handler.dispatchMessage(Handler.java:102)上的android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1477) . 位于android.app.ActivityThread.main(ActivityThread.java:6119)的looper.loop(Looper.java:154)位于com.android.internal.os.ZygoteInit $的java.lang.reflect.Method.invoke(Native Method) com.android.internal.os.ZygoteInit.main中的MethodAndArgsCaller.run(ZygoteInit.java:886)(ZygoteInit.java:776)
这是我的AndroidViewModel类
public class WordViewModel extends AndroidViewModel {
private WordRepository repository;
private LiveData<List<WordEntity>> allWords;
public WordViewModel(Application application){
super(application);
repository = new WordRepository(application);
allWords = repository.getAllWords();
}
public LiveData<List<WordEntity>> getAllWords(){
return allWords;
}
public void insert(WordEntity word){
repository.insert(word);
}
public void deleteAllWords() {
repository.deleteAllWords();
}
}
这是我的活动课
class MainActivity : AppCompatActivity() {
private lateinit var wordViewModel:WordViewModel
private lateinit var newWord:EditText
private lateinit var recyclerView:RecyclerView
private lateinit var adapter:WordAdapter
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
setSupportActionBar(toolbar)
adapter= WordAdapter()
recyclerView= findViewById<RecyclerView>(R.id.wordList)
recyclerView.adapter=adapter
//establish a connection to the current ViewModel
wordViewModel= ViewModelProviders.of(this).get(WordViewModel::class.java)
newWord = findViewById<EditText>(R.id.insertWord);
findViewById<Button>(R.id.submitWord).setOnClickListener {
fun onClick(v:View?){
if(!TextUtils.isEmpty(newWord.getText())){
wordViewModel.insert(WordEntity(newWord.getText().toString()))
}
}
}
findViewById<Button>(R.id.deleteWords).setOnClickListener{
fun onClick(v:View?){
wordViewModel.deleteAllWords()
}
}
wordViewModel.getAllWords().observe(this,Observer<List<WordEntity>>(){
fun onChanged(words:List<WordEntity>){
adapter.setWords(words)
}
})
}
}
有人可以帮我辨别我做错了什么吗?我想在远离Android的很长一段时间后拿起架构组件 . 我不完全清楚如何继续 .