【发布时间】:2021-12-30 06:32:02
【问题描述】:
如何使用 Kotlin 语言将我的用户注册表单的所有数据字段保存在 Android Studio 上的 Firebase 实时数据库中?
目前我的应用程序正在成功注册帐户,但我还希望将 cnic、号码、车牌号和用户姓名等自定义字段存储在 firebase 实时数据库中。工作代码如下。
class SignUpActivity : AppCompatActivity() {
//view binding
private lateinit var binding: ActivitySignUpBinding
//action bar
private lateinit var actionBar: ActionBar
//progression bar
private lateinit var progressDialog: ProgressDialog
//firebase auth
private lateinit var firebaseAuth: FirebaseAuth
private var name = ""
private var email = ""
private var password = ""
private var platenumber = ""
private var number = ""
private var cnic = ""
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivitySignUpBinding.inflate(layoutInflater)
setContentView(binding.root)
//config actionbar enable back button
actionBar = supportActionBar!!
actionBar.title = "Sign Up"
actionBar.setDisplayHomeAsUpEnabled(true)
actionBar.setDisplayShowHomeEnabled(true)
//config progress dialog
progressDialog = ProgressDialog(this)
progressDialog.setTitle("Wait Please")
progressDialog.setMessage("Creating account...")
progressDialog.setCanceledOnTouchOutside(false)
//init firebaseauth
firebaseAuth = FirebaseAuth.getInstance()
//handle click begin signup
binding.signupButton.setOnClickListener {
//validate data
validateData()
}
}
private fun validateData() {
//get data
name = binding.nameET.text.toString().trim()
email = binding.emailET.text.toString().trim()
password = binding.passwordET.text.toString().trim()
platenumber = binding.dobET.text.toString().trim()
number = binding.numberET.text.toString().trim()
cnic = binding.cnicET.text.toString().trim()
//validate data
if (TextUtils.isEmpty(name)){
//no password entered
binding.nameET.error = "Enter Name"
}
else if (!Patterns.EMAIL_ADDRESS.matcher(email).matches()){
//invalid email
binding.emailET.error = "Invalid Email"
}
else if (TextUtils.isEmpty(password)){
// no password entered
binding.passwordET.error = "Enter Password"
}
else if (TextUtils.isEmpty(platenumber)){
// no password entered
binding.dobET.error = "Enter Vehicle Plate Number"
}
else if (TextUtils.isEmpty(number)){
// no password entered
binding.numberET.error = "Enter Contact Number"
}
else if (TextUtils.isEmpty(cnic)){
// no password entered
binding.cnicET.error = "Enter CNIC Number"
}
else if (password.length<6){
binding.passwordET.error = "Enter a Password of Atleast 6 Characters"
}
else if (number.length<11){
binding.passwordET.error = "Enter full 11 Digit Number"
}
else if (cnic.length<13){
binding.passwordET.error = "Enter full 13 Digit CNIC Number"
}
else{
//data is valid signup new user
firebaseSignUp()
}
}
private fun firebaseSignUp() {
progressDialog.show()
//create account
firebaseAuth.createUserWithEmailAndPassword(email, password)
.addOnCompleteListener(this) {
//signup success
progressDialog.dismiss()
//get current user
val firebaseUser = firebaseAuth.currentUser
val email = firebaseUser!!.email
Toast.makeText(this, "Account Created With Email $email",Toast.LENGTH_SHORT).show()
//start activity
startActivity(Intent(this, ProfileActivity::class.java))
finish()
}
.addOnFailureListener{ e->
//signup fial
progressDialog.dismiss()
Toast.makeText(this, "Signup failed due to ${e.message}",Toast.LENGTH_SHORT).show()
}
}
override fun onSupportNavigateUp(): Boolean {
onBackPressed() // go back to previous activity
return super.onSupportNavigateUp()
}
}
【问题讨论】:
标签: android firebase kotlin firebase-realtime-database