Tại sao ứng dụng của tôi gặp sự cố khi kết nối với cơ sở dữ liệu sau khi nhấp vào nút "bt_inscription_main"

lập trình


Khi tôi nhấp vào nút lưu thông tin của người dùng, ứng dụng chỉ đóng và tôi không thể truy cập cơ sở dữ liệu để xem thông tin có được lưu hay không vì lý do đó. Khi tôi nhận xét phần “verifyUser(mail)”, tôi chỉ nhận được lời chúc mừng như một câu trả lời nhưng ứng dụng cũng đóng. Tôi thực sự không biết lỗi là gì.

đây là mã của tôi

package be.heh.projet_inventaire

import android.content.AsyncQueryHandler
import android.content.Intent
import android.os.AsyncTask
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.text.Editable
import android.text.TextWatcher
import android.util.Patterns
import android.view.View
import android.widget.Toast
import androidx.activity.viewModels
import be.heh.projet_inventaire.bd.MyDB
import be.heh.projet_inventaire.bd.User
import be.heh.projet_inventaire.bd.UserRecord
import kotlinx.android.synthetic.main.activity_main.bt_Inscription_Connexion
import kotlinx.android.synthetic.main.activity_main.bt_Inscription_main
import kotlinx.android.synthetic.main.activity_main.et_email
import kotlinx.android.synthetic.main.activity_main.et_pwd
import kotlinx.android.synthetic.main.activity_main.*
import java.lang.Exception

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        AsyncTask.execute {MyDB.getDatabase(this).userDao()}
        val viewModel: UserViewModel by viewModels()
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        et_email.addTextChangedListener(object : TextWatcher{
            override fun beforeTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {

            }

            override fun onTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {

            }

            override fun afterTextChanged(s: Editable?) {
                mailValidator(s.toString())
            }
        })

        et_pwd.addTextChangedListener(object : TextWatcher{
            override fun beforeTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {

            }

            override fun onTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {

            }

            override fun afterTextChanged(s: Editable?) {
                PwdValidator(s.toString())
            }
        })



    }

    fun xmlClickEvent(v: View) {
        when(v.id){
            bt_Inscription_main.id -> addUser()
            bt_Inscription_Connexion.id -> versConnexion()

        }
    }
    private fun validMail(email: String): Boolean {
        val emailPattern = Patterns.EMAIL_ADDRESS
        return emailPattern.matcher(email).matches()
    }
    private fun mailValidator(email: String): Boolean {
        if (validMail(email)) {
            tvEmailError.visibility = View.GONE
            return true
        } else {
            tvEmailError.text = "Adresse e-mail non valide"
            tvEmailError.visibility = View.VISIBLE
            return false
        }
    }
    private fun PwdValidator(password: String): Boolean {
        if (password.length >= 4) {
            tvPwdError.visibility = View.GONE//
            //tilPwd.error = null
            return true
        } else {
            //tilPwd.error = "Le mot de passe doit contenir au moins 4 caractères"
            tvPwdError.text = "Le mot de passe doit contenir au moins 4 caractères"
            tvPwdError.visibility = View.VISIBLE
            return false
        }
    }


    fun verifyUser(email: String) : Boolean{
        var user = UserRecord (0,"","","")
        AsyncTask.execute { user = MyDB.getDatabase(this).userDao().get(email) }
        if (user == null){return true}
        else(return false)
    }


    fun addUser(){
        try {
            val mail = et_email.text.toString()
            val pwd = et_pwd.text.toString()

            if(mailValidator(mail) && PwdValidator(pwd)){
                if(verifyUser(mail)) {
                    val u = User(
                        0, mail,
                        pwd
                    )
                    var role = ""
                    AsyncTask.execute{
                        val db = MyDB.getDatabase(this)
                        val dao = db.userDao()
                        val liste = dao.get()
                        if (liste.isEmpty()) {
                            role = "S_U"
                        } else {
                            role = "basic"
                        }
                        val u1 = UserRecord(0, u.email, u.pwd, role)
                        dao.insertUser(u1)
                    }

                    Toast.makeText(this, "user créé", Toast.LENGTH_LONG).show();
                   
                }
                else{
                    tvEmailError.text = "Cet utilisateur existe déjà"
                    tvEmailError.visibility = View.VISIBLE
                }
            }
            else{
                tvEmailError.text = "Entrez une adresse mail valide"
                tvEmailError.visibility = View.VISIBLE
                tvPwdError.text = "Le mot de passe doit contenir au moins 4 caractères"
                tvPwdError.visibility = View.VISIBLE
            }
        }
        catch (e:Exception){
            e.printStackTrace()
        }

    }

    fun versConnexion(){
        val connexion = Intent(this,ConnexionActivity::class.java)
        startActivity(connexion)
    }
}

Những gì tôi đã thử:

Tôi đã thử nhiều thứ nhưng tôi thậm chí không biết tại sao nó không hoạt động nên nó hơi ngẫu nhiên

Giải pháp 1

Nếu không có thông báo lỗi được in ra cửa sổ bảng điều khiển bằng phương thức e.printStackTrace trong khối try/catch của bạn thì không ai có thể cho bạn biết điều gì đang xảy ra.

Giải pháp 2

Nhật ký:

KeyboardViewController.show():438 Requesting to show sub view with id 2131428318(key_pos_password_header_numbers) which doesn't exist in current keyboard view
                                                                                                    jyl
                                                                                                    	at klb.a(PG:195)
                                                                                                    	at bty.a(PG:4)
                                                                                                    	at com.google.android.apps.inputmethod.latin.keyboard.LatinPasswordKeyboard.a(PG:19)
                                                                                                    	at kfh.a(PG:15)
                                                                                                    	at kev.a(PG:31)
                                                                                                    	at kev.H(PG:26)
                                                                                                    	at kez.d(PG:10)
                                                                                                    	at kez.b(PG:108)
                                                                                                    	at com.android.inputmethod.latin.LatinIME.b(PG:339)
                                                                                                    	at dwq.onStartInputView(PG:786)
                                                                                                    	at android.inputmethodservice.InputMethodService.doStartInput(InputMethodService.java:2339)
                                                                                                    	at android.inputmethodservice.InputMethodService$InputMethodImpl.startInput(InputMethodService.java:620)
                                                                                                    	at android.inputmethodservice.InputMethodService$InputMethodImpl.dispatchStartInputWithToken(InputMethodService.java:649)
                                                                                                    	at android.inputmethodservice.IInputMethodWrapper.executeMessage(IInputMethodWrapper.java:199)
                                                                                                    	at com.android.internal.os.HandlerCaller$MyHandler.handleMessage(HandlerCaller.java:44)
                                                                                                    	at android.os.Handler.dispatchMessage(Handler.java:106)
                                                                                                    	at android.os.Looper.loop(Looper.java:223)
                                                                                                    	at android.app.ActivityThread.main(ActivityThread.java:7656)
                                                                                                    	at java.lang.reflect.Method.invoke(Native Method)
                                                                                                    	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
                                                                                                    	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)

FATAL EXCEPTION: AsyncTask #2
                                                                                                    Process: be.heh.projet_inventaire, PID: 12811
                                                                                                    java.lang.NullPointerException: Can't toast on a thread that has not called Looper.prepare()
                                                                                                    	at com.android.internal.util.Preconditions.checkNotNull(Preconditions.java:157)
                                                                                                    	at android.widget.Toast.getLooper(Toast.java:179)
                                                                                                    	at android.widget.Toast.<init>(Toast.java:164)
                                                                                                    	at android.widget.Toast.makeText(Toast.java:492)
                                                                                                    	at android.widget.Toast.makeText(Toast.java:480)
                                                                                                    	at be.heh.projet_inventaire.MainActivity.addUser$lambda-2(MainActivity.kt:127)
                                                                                                    	at be.heh.projet_inventaire.MainActivity.$r8$lambda$BkrwyiTzOFeXUe8qS3noNnSP7sk(Unknown Source:0)
                                                                                                    	at be.heh.projet_inventaire.MainActivity$$ExternalSyntheticLambda1.run(Unknown Source:6)
                                                                                                    	at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:305)
                                                                                                    	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
                                                                                                    	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
                                                                                                    	at java.lang.Thread.run(Thread.java:923)

コメント

タイトルとURLをコピーしました