Question
Hey, am getting error when I fill inn the email and password fields in my app and then tap the login button. I guess there
Hey, am getting error when I fill inn the email and password fields in my app and then tap the login button. I guess there is something wrong in my UserRepository file and UserViewModel. Can I get help by any chance? Thanks in advance.
These are the errors that am getting:
at com.hdtchat.data.UserRepository$Companion.verifyUser(UserRepository.kt:23) at com.hdtchat.data.UserRepository$Companion.verifyUser(UserRepository.kt:23) at com.hdtchat.data.UserRepository$Companion.verifyUser(UserRepository.kt:23) at com.hdtchat.data.UserRepository$Companion.verifyUser(UserRepository.kt:23) at com.hdtchat.data.UserRepository$Companion.verifyUser(UserRepository.kt:23) at com.hdtchat.data.UserRepository$Companion.verifyUser(UserRepository.kt:23) at com.hdtchat.Login$readData$1.invokeSuspend(Login.kt:54) at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33) at kotlinx.coroutines.internal.DispatchedContinuationKt.resumeCancellableWith(DispatchedContinuation.kt:367) at kotlinx.coroutines.intrinsics.CancellableKt.startCoroutineCancellable(Cancellable.kt:30) at kotlinx.coroutines.intrinsics.CancellableKt.startCoroutineCancellable$default(Cancellable.kt:25) at kotlinx.coroutines.CoroutineStart.invoke(CoroutineStart.kt:110) at kotlinx.coroutines.AbstractCoroutine.start(AbstractCoroutine.kt:126) at kotlinx.coroutines.BuildersKt__Builders_commonKt.launch(Builders.common.kt:56) at kotlinx.coroutines.BuildersKt.launch(Unknown Source:1) at kotlinx.coroutines.BuildersKt__Builders_commonKt.launch$default(Builders.common.kt:47) at kotlinx.coroutines.BuildersKt.launch$default(Unknown Source:1) at com.hdtchat.Login.readData(Login.kt:52) at com.hdtchat.Login.onCreate$lambda$1(Login.kt:42) at com.hdtchat.Login.$r8$lambda$whXrwbcTPSvzkMSrbLD9yJxiwFw(Unknown Source:0) at com.hdtchat.Login$$ExternalSyntheticLambda1.onClick(Unknown Source:2) at android.view.View.performClick(View.java:7506) at com.google.android.material.button.MaterialButton.performClick(MaterialButton.java:1202) at android.view.View.performClickInternal(View.java:7483) at android.view.View.-$$Nest$mperformClickInternal(Unknown Source:0) at android.view.View$PerformClick.run(View.java:29334) at android.os.Handler.handleCallback(Handler.java:942) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loopOnce(Looper.java:201) at android.os.Looper.loop(Looper.java:288) at android.app.ActivityThread.main(ActivityThread.java:7872) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:936) Suppressed: kotlinx.coroutines.DiagnosticCoroutineContextException: [StandaloneCoroutine{Cancelling}@ab002eb, Dispatchers.Main.immediate]
Login Activity:
package com.hdtchat import android.content.Intent import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.widget.Button import android.widget.EditText import androidx.lifecycle.ViewModel import android.widget.Toast import androidx.activity.viewModels import androidx.lifecycle.lifecycleScope import androidx.lifecycle.viewmodel.compose.viewModel import androidx.room.Room import com.hdtchat.data.Dao import com.hdtchat.data.User import com.hdtchat.data.UserRepository import com.hdtchat.data.Userdatabase import com.hdtchat.databinding.ActivityLoginBinding import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch class Login : AppCompatActivity() { private lateinit var binding: ActivityLoginBinding private lateinit var appDb: Userdatabase private lateinit var button: Button override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = ActivityLoginBinding.inflate(layoutInflater) setContentView(binding.root) appDb = Userdatabase.getDatabase(this) binding.btnSignUp.setOnClickListener { val intent = Intent(this, Signup::class.java) startActivity(intent) } binding.btnLogin.setOnClickListener { readData() } } private fun readData() { val email = binding.edtEmail.text.toString() val password = binding.edtPassword.text.toString() if(email.isNotBlank() && password.isNotBlank()) { lifecycleScope.launch { try { val user = UserRepository.verifyUser(email, password) Toast.makeText(this@Login, "Login Success", Toast. LENGTH_SHORT).show() val intent1 = Intent(this@Login, Home::class.java) startActivity(intent1) } catch (e: Exception) { Toast.makeText(this@Login, "Login Failed", Toast. LENGTH_SHORT).show() } } } else { Toast.makeText(this@Login, "Login Failed", Toast.LENGTH_SHORT).show() } } } UserRepository:
package com.hdtchat.data import android.provider.ContactsContract.CommonDataKinds.Email import androidx.lifecycle.LiveData import com.hdtchat.data.Dao import com.hdtchat.data.User //the UserRepository class will abstract access to multiple data sources. The repostory is not part of the architecture component libraries, but is a suggested best practice for code separation and architecture class UserRepository(private val userDao: Dao) { val readAllData: LiveData> = userDao.readAllData() suspend fun addUser(user: User) { userDao.addUser(user) } fun verifyUser(edtEmail: String, edtPassword: String): User { return userDao.getUser(edtEmail = edtEmail, edtPassword = edtPassword) } companion object { fun verifyUser(edtEmail: String, edtPassword: String): User { return verifyUser(edtEmail, edtPassword) } } }
UserViewModel:
package com.hdtchat.data import android.app.Application import android.content.Context import android.provider.ContactsContract.CommonDataKinds.Email import androidx.lifecycle.AndroidViewModel import androidx.lifecycle.LiveData import androidx.lifecycle.viewModelScope import androidx.lifecycle.lifecycleScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.coroutineScope import kotlinx.coroutines.launch //The ViewModel role is to provide data to the UI and survive configuration changes. A viewmodel acts as a communication center between the repository and the UI. class UserViewModel(application: Application): AndroidViewModel(application) { private val repository: UserRepository init { val userDao = Userdatabase.getDatabase(application).dao() repository = UserRepository(userDao) } fun addUser(user: User) { viewModelScope.launch(Dispatchers.IO) { repository.addUser(user) } } fun verifyUser(edtEmail: String, edtPassword: String) { viewModelScope.launch { repository.verifyUser(edtEmail = edtEmail, edtPassword = edtPassword) } } }
Step by Step Solution
There are 3 Steps involved in it
Step: 1
Get Instant Access to Expert-Tailored Solutions
See step-by-step solutions with expert insights and AI powered tools for academic success
Step: 2
Step: 3
Ace Your Homework with AI
Get the answers you need in no time with our AI-driven, step-by-step assistance
Get Started