Не удается создать экземпляр подкласса AndroidViewModel - PullRequest
0 голосов
/ 18 сентября 2018

Мой класс ViewModel находится на Java, а мой класс Activity - на Kotlin.Я получаю сообщение об ошибке

09-18 14: 01: 32.737 14082-14082 / com.meme.archcompwordlist E / AndroidRuntime: FATAL EXCEPTION: main Процесс: com.meme.archcompwordlist, PID: 14082java.lang.RuntimeException: невозможно запустить действие ComponentInfo {com.meme.archcompwordlist / com.meme.archcompwordlist.MainActivity}: java.lang.RuntimeException: невозможно создать экземпляр класса com.meme.archcompwordlist.WordViewModel в android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2665) в android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2726) в android.app.ActivityThread.-wrap12 (ActivityThread.java) в android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1477) в android.os.Handler.dispatchMessage (Handler.java:102) в android.os.Looper.loop (Looper.java:154) в android.app.ActivityThread.main (ActivityThread.java:6119) в java.lang.reflect.Method.invoke (собственный метод) в com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:886) at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:776). Причина: java.lang.RuntimeException: Невозможно создать экземпляр класса com.meme.archcompwordlist.WordViewModel в android.arch.lifecycle.ViewModelProvider $ AndroidViewModelFactory.create (ViewModelProvider.java:207) в android.arch.lifecycle.ViewModelProvider.get (ViewModelProvider.java:134) в android.arch.lifecycle.ViewModelProvider.get (ViewModelProvider.j) com.jpg)..archcompwordlist.MainActivity.onCreate (MainActivity.kt: 37) на android.app.Activity.performCreate (Activity.java:6679) на android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1118) на android.app.ActivityThread.executeLaunchActivity (ActivityThread.java:2618) в android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2726) в android.app.ActivityThread.-wrap12 (ActivityThread.java) в android.app.ActivityThread $ H.handleMessage (ActivityThread.Java: 1477) на android.os.Handler.dispatchMessage (Handler.java:102) на android.os.Looper.loop (Looper.java:154) на android.app.ActivityThread.main (ActivityThread.java:6119) на java.lang.reflect.Method.invoke (собственный метод) на com.android.internal.os.ZygoteInit $MethodAndArgsCaller.run (ZygoteInit.java:886) по адресу com.android.internal.os.ZygoteInit.main (ZygoteInit.java:776). Вызывается:Собственный метод) в java.lang.reflect.Constructor.newInstance (Constructor.java:430) в android.arch.lifecycle.ViewModelProvider $ AndroidViewModelFactory.create (ViewModelProvider.java:199) в android.arch.lifecycle.ViewModelProvider.ViewModelProvider.java:134) в android.arch.lifecycle.ViewModelProvider.get (ViewModelProvider.java:102) в com.meme.archcompwordlist.MainActivity.onCreate (MainActivity.kt: 37) в android.app.Activity.performCreate (Activity.java: 6679) на android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1118) на android.app.ActivityThread.performLaunchActivity (ActivityThread.Java: 2618) на android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2726) на android.app.ActivityThread.-wrap12 (ActivityThread.java) на android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1477)на android.os.Handler.dispatchMessage (Handler.java:102) на android.os.Looper.loop (Looper.java:154) на android.app.ActivityThread.main (ActivityThread.java:6119) на java.lang.refle.Method.invoke (собственный метод) на com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:886) на com.android.internal.os.ZygoteInit.main (ZygoteInit.java:776) Причина: java.lang.RuntimeException: не удается найти реализацию для com.meme.archcompwordlist.room.WordRoomDatabase.WordRoomDatabase_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) в com.meme.archcompwordlist.WordViewModel. (WordViewModel.java:22) в java.lang.refle.Constructor.newInstance0 (собственный метод) в java.lang.reflect.Constructor.newInstance (Constructor.java:430) в android.arch.lifecycle.ViewModelProvider $ AndroidViewModelFactory.create (ViewModelProvider.java:199) в android.lifecycle.ViewModelProvider.get (ViewModelProvider.java:134) в android.arch.lifecycle.ViewModelProvider.get (ViewModelProvider.java:102) в com.meme.archcompwordlist.MainActivity.onCreate (MainActivity.kt: 37) в android.app.Activity.performCreate (Activity.java:6679) в android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1118) в android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2618) в android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2726) в android.app.ActivityThread.-wrap12 (ActivityThread.java)на android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1477) на android.os.Handler.dispatchMessage (Handler.java:102) на android.os.Looper.loop (Looper.java:154) на android.app.ActivityThread.main (ActivityThread.java:6119) на java.lang.reflect.Method.invoke (собственный метод) на com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:886) на ком.android.internal.os.ZygoteInit.main (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.Мне не совсем понятно, как поступить.

...