Android studio 我在Android Studio中不断收到未初始化的DPropertyAccessException
我想在我的应用程序中使用本地数据库的Room实现一个登录系统。 但不知何故,我一直得到以下例外: 致命异常:线程2 kotlin.UninitializedPropertyAccessException:lateinit属性登录尚未初始化 在我的登录活动中,输入的用户数据应该传递给DAO,以便对其运行特定查询,并检查数据库中是否存在该用户。这里是我的LogIn.kt:Android studio 我在Android Studio中不断收到未初始化的DPropertyAccessException,android-studio,kotlin,android-room,Android Studio,Kotlin,Android Room,我想在我的应用程序中使用本地数据库的Room实现一个登录系统。 但不知何故,我一直得到以下例外: 致命异常:线程2 kotlin.UninitializedPropertyAccessException:lateinit属性登录尚未初始化 在我的登录活动中,输入的用户数据应该传递给DAO,以便对其运行特定查询,并检查数据库中是否存在该用户。这里是我的LogIn.kt: package com.example.terito import android.content.Intent import
package com.example.terito
import android.content.Intent
import android.os.Bundle
import android.util.Log
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.ViewModelProvider
import com.example.terito.data.LogIn
import com.example.terito.data.UserViewModel
import com.example.terito.data.userDao
import com.example.terito.data.userDatabase
import kotlinx.android.synthetic.main.log_in.*
class LogInActivity : AppCompatActivity() {
private lateinit var mUserViewModel: UserViewModel
private lateinit var userDataB : userDatabase
private lateinit var userDao: userDao
private lateinit var logIn: LogIn
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.log_in)
val inputName = username_logIn.text.toString()
val inputPassword = password_logIn.text.toString()
kein_profil_klick.setOnClickListener {
startActivity(Intent(this, MainActivity::class.java))
}
mUserViewModel = ViewModelProvider(this).get(UserViewModel::class.java)
logIn = LogIn(userName = inputName, password = inputPassword)
userDataB = userDatabase.getDatabase(this)
// does entered user exist
logIn_button.setOnClickListener {
// data entered?
/* if (inputName.isEmpty() || inputPassword.isEmpty()) {
Toast.makeText(this, "Bitte alle Felder ausfüllen!", Toast.LENGTH_LONG).show()
} else { */
userDao = userDataB.userDao()
// check for user in background thread
Thread (kotlinx.coroutines.Runnable {
logIn = userDao.findUser(inputName, inputPassword)
if (logIn == null) {
// entered user does not exist
runOnUiThread { Runnable {
Toast.makeText(this, "entered use does not exist!", Toast.LENGTH_LONG).show()
} }
} else {
// entered user does exist
Toast.makeText(this, "LogIn successfull", Toast.LENGTH_LONG).show()
}
}).start()
// }
}
// clear user DB
clearButton.setOnClickListener {
mUserViewModel.cleanUserTable()
Log.d("CLEARED", "DATABASE HAS BEEN CLEARED")
}
}
}
下面是我尝试初始化的相应登录类:
package com.example.terito.data
import androidx.room.ColumnInfo
import androidx.room.Entity
import androidx.room.PrimaryKey
@Entity(tableName = "users_data")
class user(
@PrimaryKey(autoGenerate = true)
val id : Int, val mail : String, val userName : String, val password : String)
class LogIn(
@ColumnInfo(name = "userName") val userName: String,
@ColumnInfo(name = "password") val password: String
)
我对科特林的情况还比较陌生,如果有任何进展,我都会很感激的