我正在html" target="_blank">开发一本新书android应用程序,但当我测试从logcat获取以下异常的代码时,应用程序崩溃
hread.mainRuntimeException:无法启动活动ComponentInfo{hread.java:6662}:java.lang.reflect.RuntimeException:无法创建ethod.invokeBookViewModel类的实例com.android.internal.os.ActivityTaller.runLaunchActive(ActivityTnit.java:547)com.android.internal.os.ActivityTnit.mainLaunchActive(ActivityTnit.java:873)java.lang.ActivityThread.-wrap11(未知来源:0)在com.example.bookkeepers.ActivityThread$H. handleMessage(ActivityTandroidx.lifecycle.)在android.os.Handler.dispatchMessage(Handler.java:106)在android.os.Looper.loop(Looper.java:176)android.app.ActivityTjava.lang.(ActivityTcom.example.bookkeepers/com.example.bookkeepers.MainActivity)java.lang.Mcom.example.bookkeepers.(Native Method)android.app.RuntimeInit$Method odAndArgsChread.perform(RuntimeIhread.java:2843)在android.app.ZygoteIhread.handle(ZygoteIhread.java:2921)引起的:android.app.RuntimeException:无法在hread.java:1639ViewModelProvider$AndroidViewModelFacory. create(ViewModelProvider. java: 208)在androidx. l创建android.app.BookViewModel类的实例
ifecycle。ViewModelProvider。在androidx上获取(ViewModelProvider.java:135)。生命周期。ViewModelProvider。获取(ViewModelProvider.java:103)。实例簿记员。主要活动。在android上创建(MainActivity.kt:30)。应用程序。活动在android上执行创建(Activity.java:7074)。应用程序。活动在android上执行创建(Activity.java:7065)。应用程序。仪器仪表。android上的callActivityOnCreate(Instrumentation.java:1214)。应用程序。ActivityThread。performLaunchActivity(ActivityThread.java:2796)。。。9更多原因:java。lang.reflect。java上的InvocationTargetException。lang.reflect。构造函数。java上的newInstance0(本机方法)。lang.reflect。构造函数。androidx上的newInstance(Constructor.java:334)。生命周期。ViewModelProvider$AndroidViewModelFactory。创建(ViewModelProvider.java:200)。。。还有16个原因:java。lang.RuntimeException:找不到com的实现。实例簿记员。BookRoomDatabase。androidx上不存在BookRoomDatabase\u Impl。房间房间androidx上的GetGenerateImplementation(Room.java:94)。房间RoomDatabase$生成器。在com上构建(RoomDatabase.java:952)。实例簿记员。BookRoomDatabase$Companion。getDatabase(BookRoomDatabase.kt:24)位于com。实例簿记员。BookViewModel。(BookViewModel.kt:12)。。。19个以上
下面是我的BookViewModel类,它扩展了AndroidViewModel类
class BookViewModel(application: Application) : AndroidViewModel(application) {
private val bookDao: BookDao
init {
val bookDb = BookRoomDatabase.getDatabase(application)
bookDao = bookDb!!.bookDao()
}
fun insert(book: Book) {
InsertAsyncTask(bookDao).execute(book)
}
companion object {
private class InsertAsyncTask(private val bookDao: BookDao) :
AsyncTask<Book, Void, Void>() {
override fun doInBackground(vararg books: Book): Void? {
bookDao.insert(books[0])
return null
}
}
}}
主活动下方。kt级
MainActivity : AppCompatActivity() {
lateinit var bookViewModel: BookViewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
setSupportActionBar(toolbar)
fab.setOnClickListener { view ->
val intent = Intent(this, NewBookActivity::class.java)
startActivityForResult(intent, NEW_NOTE_ACTIVITY_REQUEST_CODE)
}
bookViewModel = ViewModelProviders.of(this).get(BookViewModel::class.java)
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (requestCode == NEW_NOTE_ACTIVITY_REQUEST_CODE && resultCode == Activity.RESULT_OK) {
val id = UUID.randomUUID().toString()
val authorName = data!!.getStringExtra(NewBookActivity.NEW_AUTHOR)
val bookName = data!!.getStringExtra(NewBookActivity.NEW_BOOK)
val book = Book(id, authorName, bookName)
bookViewModel.insert(book)
Toast.makeText(
applicationContext,
R.string.saved,
Toast.LENGTH_LONG
).show()
} else {
Toast.makeText(
applicationContext,
R.string.not_saved,
Toast.LENGTH_LONG
).show()
}
}
companion object{
private const val NEW_NOTE_ACTIVITY_REQUEST_CODE = 1
}}
下面的数据库类
@Database(entities = [Book::class], version = 1)
abstract class BookRoomDatabase :RoomDatabase() {
abstract fun bookDao():BookDao
companion object {
private var bookRoomInstance:BookRoomDatabase? = null
fun getDatabase(context: Context): BookRoomDatabase? {
if (bookRoomInstance == null)
synchronized(BookRoomDatabase::class.java){
if(bookRoomInstance == null){
bookRoomInstance = Room.databaseBuilder<BookRoomDatabase>(context.applicationContext,
BookRoomDatabase::class.java, "book_database")
.build()
}
}
return bookRoomInstance
}
}}
dao级以下
@Dao
interface BookDao {
@Insert
fun insert(book: Book)
}
帐面下实体类
@Entity(tableName = "books")
class Book(@PrimaryKey val id: String,
@ColumnInfo(name = "author")
val author: String,
val book:String) {
}
问题是您试图在不提供所需参数的情况下实例化ViewModel应用程序:应用程序
。我在这里发布了一个解决这个问题的答案:https://stackoverflow.com/a/65004171/13834895.
它背后的想法是,您正在使用kotlin,并且在您的应用程序build.gradle
中,您应该应用kapt plugin应用插件'kotlin-kapt'
并使用kapt
而不是annotationProcess
implementation "android.arch.lifecycle:extensions:$lifecycle_version"
kapt "android.arch.lifecycle:compiler:$lifecycle_version"
implementation "android.arch.persistence.room:runtime:$room_version"
kapt "android.arch.persistence.room:compiler:$room_version"
检查这个答案https://stackoverflow.com/a/50487165/4614550
这是我的代码 这是从谷歌样本..后我想: 问题就在这里: java.lang.RuntimeException:无法创建类com.lacas.db.room.BookMarkViewModel的实例 我可以用这个片段吗? null
你好,我是android中MVVM的新手,正在使用livedata。我正在尝试创建viewmodel的一个实例。我觉得问题在于我没有将存储库传递给viewmodel构造函数。我一直无法创建viewmodel的实例。我不知道该怎么做这里是我的viewmodel和它的创建。
我尝试了MVVM架构,实现了所有需要的类和方法。在MainActivity中创建ViewModel类的对象时,我得到以下错误的实例。 我试了一个YouTube教程中的例子。我把所有的实现都做对了。我尝试过将ViewModel类和构造函数公开,但应用程序仍然在运行时崩溃。 mainactivity.java NoteViewModel.java noteRepository.java 日志
问题内容: 我希望能够通过在已实例化的对象上调用方法来创建对象的新实例。例如,我有一个对象: 我希望能够调用并拥有两个有机体类型的对象。此时我的方法如下所示: 并且我非常确定它不起作用(我甚至不确定如何测试它。我在本文中尝试了gc方法)。那么,如何使我的对象创建自己的副本,就像我创建的第一个对象(带有)一样,该副本是可访问的? 问题答案: 另一个选项-如果方法中未使用实例(): 这样可以确保生物产
我在我的词典应用程序中使用了第一个刀柄,但是当我运行我的应用程序时,它会崩溃并显示此日志: 这是我的模块类:`@ Module @ InstallIn(singleton component::class)object word info Module { 这是我的主活动类,它初始化视图模型并尝试使用它: 这是我的观点模型: 问题出在哪里,怎么解决?