完整错误堆栈跟踪:

04-05 16:01:34.265 18746-18746 /? E / AndroidRuntime:FATAL EXCEPTION:main进程:com.example.mrathi.livedataviewmodel,PID:18746 java.lang.RuntimeException:无法启动活动ComponentInfo {com.example.mrathi.livedataviewmodel / com.example.mrathi.livedataviewmodel.MainActivity在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726)上的android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2665)的android.app.ActivityThread.-wrap12(ActivityThread.java)处的kotlin.KotlinNullPointerException android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1477)在android.app.Handler.dispatchMessage(Handler.java:102)android.app.Looper.loop(Looper.java:154)android.app .ActivityThread.main(ActivityThread.java:6119)位于com.android的com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:886)的java.lang.reflect.Method.invoke(Native Method) .internal.os.ZygoteInit.main(ZygoteInit.java:776)引起:com.example.mrathi.li的kotlin.KotlinNullPointerException android.app.ActivityThread.performLaunchActivity上android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118)的android.app.Activity.performCreate(Activity.java:6679)上的vedataviewmodel.MainActivity.onCreate(MainActivity.kt:40) (ActivityThread.java:2618)位于android.app.A活动时的android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726)android.app.ActivityThread $ H.handleMessage(ActivityThread.java)上的android.app.ActivityThread.-wrap12(ActivityThread.java) :1477)在Android.os.Handler.dispatchMessage(Handler.java:102)的android.app.Looper.loop(Looper.java:154)在android.app.ActivityThread.main(ActivityThread.java:6119)在java位于com.android.internal.os.ZygoteInit的com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:886)中的.lang.reflect.Method.invoke(Native Method)(ZygoteInit.java: 776)


这是我的带有api的数据库类(在Kotlin中使用MVVM模型)

@Database(entities = arrayOf(BorrowModel::class), version = 1)
abstract class AppDatabase : RoomDatabase() {

    companion object {
        var INSTANCE: AppDatabase? = null

        fun getDatabase(context: Context): AppDatabase {
            if (INSTANCE == null) {
                **INSTANCE = Room.databaseBuilder(context.applicationContext, AppDatabase::class.java, "borrow_db")
                        .build()** through target invocation exception
            }
            return INSTANCE as AppDatabase
        }
    }
    abstract fun itemAndPersonModel(): BorrowModelDao
}

这是我用于观察UI更新的数据库更改的活动代码:

class MainActivity : AppCompatActivity() , View.OnLongClickListener {

    override fun onLongClick(v: View?): Boolean {
        val borrowModel = v!!.getTag() as BorrowModel
        viewModel!!.deleteItem(borrowModel)
        return true
    }

     var viewModel: BorrowedListViewModel? = null
    //  private var recyclerViewAdapter: RecyclerViewAdapter? = null
    // private var recyclerView: RecyclerView? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        var users = ArrayList<BorrowModel>()
        var obj_adapter = RecyclerViewAdapter(users, this);

        recyclerView.layoutManager = LinearLayoutManager(this, 
        LinearLayout.VERTICAL, false)
        recyclerView.adapter = obj_adapter
        try {
            viewModel = 
          ViewModelProviders.of(this).get(BorrowedListViewModel::class.java)
        }catch ( e :Exception){
            e.toString()
        }


      viewModel!!.getItemAndPersonList()!!.observe(this, object : 
            Observer<List<BorrowModel>?> {
                override fun onChanged(t: List<BorrowModel>?) {
                    Log.v("OnChanged","OnChanged!!")
                    obj_adapter.addItems(t)
            }
        })
    }
}

这是 ViewModel 类:

class BorrowedListViewModel(application: Application) : AndroidViewModel(application) {

    private var itemAndPersonList: LiveData<List<BorrowModel>>? = null
    private var appDatabase: AppDatabase? = null

    init {
        appDatabase = AppDatabase.getDatabase(this.getApplication())

        itemAndPersonList = appDatabase!!.itemAndPersonModel().getAllBorrowedItems()

    }

    fun getItemAndPersonList(): LiveData<List<BorrowModel>>? {
        return itemAndPersonList
    }

    fun deleteItem(borrowModel: BorrowModel) {
        deleteAsyncTask(appDatabase!!).execute(borrowModel)
    }

    class deleteAsyncTask internal constructor(private var db: AppDatabase) : AsyncTask<BorrowModel, Void, Void>() {

        override fun doInBackground(vararg params: BorrowModel): Void? {
            db.itemAndPersonModel().deleteBorrow(params[0])
            return null
        }

    }

}