Answered step by step
Verified Expert Solution
Link Copied!

Question

1 Approved Answer

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

blur-text-image

Get Instant Access to Expert-Tailored Solutions

See step-by-step solutions with expert insights and AI powered tools for academic success

Step: 2

blur-text-image

Step: 3

blur-text-image

Ace Your Homework with AI

Get the answers you need in no time with our AI-driven, step-by-step assistance

Get Started

Recommended Textbook for

Databases And Information Systems 1 International Baltic Conference Dbandis 2020 Tallinn Estonia June 19 2020 Proceedings

Authors: Tarmo Robal ,Hele-Mai Haav ,Jaan Penjam ,Raimundas Matulevicius

1st Edition

303057671X, 978-3030576714

More Books

Students also viewed these Databases questions

Question

Know how to use reservations systems to inventory demand.

Answered: 1 week ago

Question

Be familiar with the integrative servicescape model.

Answered: 1 week ago