FATAL EXCEPTION: main
Process: com.example.myroom, PID: 15937
java.lang.NullPointerException
at com.example.myroom.Utils.getCurrentUserId(Utils.kt:39)
at com.example.myroom.auth.OTPFragment.verifyOtp(OTPFragment.kt:57)
at com.example.myroom.auth.OTPFragment.onLoginButtonClicked$lambda$1(OTPFragment.kt:51)
at com.example.myroom.auth.OTPFragment.$r8$lambda$H1SQCA2m8i1BlLwc7MGU-xAoj_s(Unknown Source:0)
at com.example.myroom.auth.OTPFragment$$ExternalSyntheticLambda1.onClick(D8$$SyntheticClass:0)
at android.view.View.performClick(View.java:7740)
at com.google.android.material.button.MaterialButton.performClick(MaterialButton.java:1213)
at android.view.View.performClickInternal(View.java:7710)
at android.view.View.-$$Nest$mperformClickInternal(Unknown Source:0)
at android.view.View$PerformClick.run(View.java:30629)
at android.os.Handler.handleCallback(Handler.java:958)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loopOnce(Looper.java:257)
at android.os.Looper.loop(Looper.java:368)
at android.app.ActivityThread.main(ActivityThread.java:8826)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:572)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1049)
class OTPFragment : Fragment() {
private val viewModel: AuthViewModel by viewModels()
private lateinit var binding: FragmentOTPBinding
private lateinit var userNumber : String
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
binding = FragmentOTPBinding.inflate(layoutInflater)
getUserNumber()
customizingEnteringOTP()
sendOTP()
onLoginButtonClicked()
onBackButtonClicked()
return binding.root
}
private fun onLoginButtonClicked() {
binding.btnLogin.setOnClickListener{
Utils.showDialog(requireContext(), "Signing you...")
val editTexts = arrayOf(binding.etOtp1, binding.etOtp2, binding.etOtp3, binding.etOtp4, binding.etOtp5, binding.etOtp6)
val otp = editTexts.joinToString("") {it.text.toString()}
if(otp.length < editTexts.size){
Utils.showToast(requireContext(), "Please enter valid otp")
}
else{
editTexts.forEach { it.text?.clear() ; it.clearFocus() }
verifyOtp(otp)
}
}
}
private fun verifyOtp(otp: String) {
val user = Users(uid = Utils.getCurrentUserId() , userPhoneNumber = userNumber , userAddress = null )
viewModel.signInWithPhoneAuthCredential(otp, userNumber , user)
lifecycleScope.launch {
viewModel.isSignedIsSuccessfully.collect{
if(it){
Utils.hideDialog()
Utils.showToast(requireContext() , "Logged In...")
startActivity(Intent(requireActivity() , UsersMainActivity:: class.java))
requireActivity().finish()
}
}
}
}
private fun sendOTP() {
Utils.showDialog(requireContext(), "Sending OTP...")
viewModel.apply {
sendOTP(userNumber , requireActivity())
lifecycleScope.launch {
otpSent.collect{otpSent->
if(otpSent){
Utils.hideDialog()
Utils.showToast(requireContext() , "Otp sent to the number..")
}
}
}
}
}
private fun onBackButtonClicked() {
binding.tbOtpFragment.setNavigationOnClickListener{
findNavController().navigate(R.id.action_OTPFragment_to_signInFragment)
}
}
private fun customizingEnteringOTP() {
val editTexts = arrayOf(binding.etOtp1, binding.etOtp2, binding.etOtp3, binding.etOtp4, binding.etOtp5, binding.etOtp6)
for (i in editTexts.indices){
editTexts[i].addTextChangedListener ( object : TextWatcher{
override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {}
override fun onTextChanged(number: CharSequence?, start: Int, before: Int, count: Int) {}
override fun afterTextChanged(s: Editable?) {
if (s?.length==1) {
if (i < editTexts.size - 1) {
editTexts[i + 1].requestFocus()
}
} else if (s?.length == 0){
if ( i>0){
editTexts[i - 1].requestFocus()
}
}
}
} )
}
}
private fun getUserNumber() {
val bundle = arguments
userNumber = bundle?.getString("number").toString()
binding.tvUserNumber.text = userNumber
}
}
user22772903 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.