Android 登录按钮需要点击两次才能登录

Android 登录按钮需要点击两次才能登录,android,postgresql,api,android-studio,kotlin,Android,Postgresql,Api,Android Studio,Kotlin,我正在AndroidStudio上制作一个应用程序,我需要在他们登录该应用程序时验证凭据。该应用程序使用API并验证凭据,我在数据库中创建了此功能以检查某人的电子邮件和密码: (postgresql) 我正在通过以下CheckLoginas函数解析数据: var bola: Boolean? = null fun CheckLoginas(c: Context?, email: String, pass: String): Boolean? { var mQueue: Reque

我正在AndroidStudio上制作一个应用程序,我需要在他们登录该应用程序时验证凭据。该应用程序使用API并验证凭据,我在数据库中创建了此功能以检查某人的电子邮件和密码: (postgresql)

我正在通过以下CheckLoginas函数解析数据:

var bola: Boolean? = null
fun CheckLoginas(c: Context?, email: String, pass: String): Boolean? {
        var mQueue: RequestQueue
        mQueue = Volley.newRequestQueue(c);
        var url = "https://myurl.com" + "/utilizador/login/" + email + "/" + pass
        val request = JsonArrayRequest(Request.Method.GET, url, null, Response.Listener {
                response ->try {
                var jsonArray = JSONArray()
                jsonArray = response.getJSONArray(0)
                for (i in 0 until jsonArray.length())
                {
                        val jsonObject : JSONObject? = jsonArray.getJSONObject(i)
                        //val user = jsonArray.getJSONObject(i)
                        //val bool = jsonObject.getBoolean("login")
                        val boo : Boolean = jsonObject!!.getBoolean("login")
                        println("im inside CheckLoginas boo $boo\n\n")
                        bola = boo
                }
        } catch (e: JSONException) {
                e.printStackTrace()
        }
        }, Response.ErrorListener { error -> error.printStackTrace() })
        mQueue?.add(request)
        return bola
}
“bola”变量是一个全局变量,因为我需要从函数返回一个布尔值,这样我就可以知道凭证是否在另一个活动中检查(或不检查)

问题:

要在凭据正确时登录,我必须按两次登录按钮。如果电子邮件和密码正确,我第一次按它时会出现“错误凭据”错误,第二次登录时会出现错误。我已经试过用while()来做了,我一步一步地检查了它,结果似乎很好,似乎没有任何东西可以修复这个错误。。。这个函数可以工作,API也可以,应用程序本身也可以工作,它只是有一个错误,点击两次按钮。。。这是活动代码:

package com.example.crowdzero

import CheckLoginas
import Database
import android.content.Intent
import android.os.Bundle
import android.view.View.OnFocusChangeListener
import android.widget.Button
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import com.google.android.material.textfield.TextInputLayout
import java.lang.Thread.sleep

class Login : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_login)

        val log_in_btn_log_in = findViewById<Button>(R.id.log_in_btn_log_in)
        val log_in_btn_registar = findViewById<Button>(R.id.log_in_btn_registar)

        log_in_btn_log_in.setOnClickListener {
            verificacao()

        }

        log_in_btn_registar.setOnClickListener {
            val intent = Intent(this, Registo::class.java)
            startActivity(intent)
        }
    }



    private fun verificacao() {

        val log_in_input_text_email = findViewById<TextInputLayout>(R.id.log_in_input_text_email)
        val log_in_input_text_password = findViewById<TextInputLayout>(R.id.log_in_input_text_password)
        val string_email = log_in_input_text_email?.getEditText()?.getText().toString()?.trim()
        val string_password = log_in_input_text_password?.getEditText()?.getText().toString()?.trim()

            if (string_email.isNullOrEmpty())
            {
                log_in_input_text_email.setError(" ")
            }
            else if (string_password.isNullOrEmpty())
            {
                log_in_input_text_password.setError(" ")
            }
            else
            {
                   val email = log_in_input_text_email.editText?.text.toString()
                   val password = log_in_input_text_password.editText?.text.toString()
                   //var baca = CheckLoginas(this,email,password)
                   println(email)
                   println(password)
                   var baca: Boolean? = null
                   baca = CheckLoginas(this, email, password)
                   //baca = CheckLoginas(this,email,password)
                   if (baca == false) {
                       //Toast.makeText(this, "Esta conta não está registada", Toast.LENGTH_SHORT).show();
                       println("Im inside if in login baca $baca")
                   } else if (baca == true) {
                       Toast.makeText(this, email, Toast.LENGTH_SHORT).show();
                       Toast.makeText(this, password, Toast.LENGTH_SHORT).show();
                       val intent = Intent(this, Home::class.java)
                       startActivity(intent)
                       finish()
                   }
            }
    }
}
package com.example.crowdzero
导入CheckLoginas
导入数据库
导入android.content.Intent
导入android.os.Bundle
导入android.view.view.OnFocusChangeListener
导入android.widget.Button
导入android.widget.Toast
导入androidx.appcompat.app.appcompat活动
导入com.google.android.material.textfield.TextInputLayout
导入java.lang.Thread.sleep
类登录名:AppCompatActivity(){
重写创建时的乐趣(savedInstanceState:Bundle?){
super.onCreate(savedInstanceState)
setContentView(R.layout.activity\u登录)
val log\U in\U btn\U log\U in=findViewById(R.id.log\U in\U btn\U log\U in)
val log_in_btn_registar=findviewbyd(R.id.log_in_btn_registar)
log_in_btn_log_in.setOnClickListener{
可可
}
登录\u btn\u registar.setOnClickListener{
val intent=intent(这个,Registo::class.java)
星触觉(意图)
}
}
私人咖啡馆{
val log_in_input_text_email=findviewbyd(R.id.log_in_input_text_email)
val log_in_input_text_password=findviewbyd(R.id.log_in_input_text_password)
val string_email=log_in_input_text_email?.getEditText()?.getText().toString()?.trim()
val string_password=log_in_input_text_password?.getEditText()?.getText().toString()?.trim()
if(string_email.isNullOrEmpty())
{
登录输入文本电子邮件。设置错误(“”)
}
else if(字符串\u password.isNullOrEmpty())
{
登录\输入\文本\密码。设置错误(“”)
}
其他的
{
val email=log_in_input_text_email.editText?.text.toString()
val password=log_in_input_text_password.editText?.text.toString()
//var baca=CheckLoginas(此项、电子邮件、密码)
println(电子邮件)
println(密码)
var baca:布尔?=null
baca=检查登录(此、电子邮件、密码)
//baca=检查登录(此、电子邮件、密码)
如果(baca==false){
//Toast.makeText(这个“Esta conta não estáregistada”,Toast.LENGTH_SHORT.show();
println(“如果登录baca$baca,则为Im内部”)
}else if(baca==true){
Toast.makeText(此,电子邮件,Toast.LENGTH_SHORT).show();
Toast.makeText(this,password,Toast.LENGTH_SHORT).show();
val intent=intent(这个,Home::class.java)
星触觉(意图)
完成()
}
}
}
}
当我使用来自数据库的实际电子邮件和密码测试时,baca变量在应该为true时保持为false,因为CheckLoginas boo var为true。这就是造成问题的原因。


我对数据库API应用程序还比较陌生,所以如果这是一件小事,请原谅我

您正在调用的
baca=CheckLoginas(这个,电子邮件,密码)
baca不会立即更新,下一行
if(baca==false)
将在API响应到达之前执行,因此在得到一些响应后,baca将变为true。这就是为什么需要单击两次。

已解决:

我几乎在login.kt文件中插入了CheckLoginas函数。现在可以了!现在看起来是这样的:

package com.example.crowdzero
 
import Database
import android.content.Intent
import android.os.Bundle
import android.view.View.OnFocusChangeListener
import android.widget.Button
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import com.android.volley.Request
import com.android.volley.RequestQueue
import com.android.volley.Response
import com.android.volley.toolbox.JsonArrayRequest
import com.android.volley.toolbox.Volley
import com.google.android.material.textfield.TextInputLayout
import org.json.JSONArray
import org.json.JSONException
import org.json.JSONObject
import java.lang.Thread.sleep

class Login : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_login)

        val log_in_btn_log_in = findViewById<Button>(R.id.log_in_btn_log_in)
        val log_in_btn_registar = findViewById<Button>(R.id.log_in_btn_registar)

        log_in_btn_log_in.setOnClickListener {
            verificacao()

        }

        log_in_btn_registar.setOnClickListener {
            val intent = Intent(this, Registo::class.java)
            startActivity(intent)
        }
    }



    private fun verificacao() {

        val log_in_input_text_email = findViewById<TextInputLayout>(R.id.log_in_input_text_email)
        val log_in_input_text_password = findViewById<TextInputLayout>(R.id.log_in_input_text_password)
        val string_email = log_in_input_text_email?.getEditText()?.getText().toString()?.trim()
        val string_password = log_in_input_text_password?.getEditText()?.getText().toString()?.trim()

            if (string_email.isNullOrEmpty())
            {
                log_in_input_text_email.setError(" ")
            }
            else if (string_password.isNullOrEmpty())
            {
                log_in_input_text_password.setError(" ")
            }
            else
            {
                   val email = log_in_input_text_email.editText?.text.toString()
                   val password = log_in_input_text_password.editText?.text.toString()
                var mQueue: RequestQueue
                mQueue = Volley.newRequestQueue(this);
                var url = "https://myurl.com" + "/utilizador/login/" + email + "/" + password
                val request = JsonArrayRequest(Request.Method.GET, url, null, Response.Listener {
                    response ->try {
                    var jsonArray = JSONArray()
                    jsonArray = response.getJSONArray(0)
                    for (i in 0 until jsonArray.length())
                    {
                        val jsonObject : JSONObject? = jsonArray.getJSONObject(i)
                        //val user = jsonArray.getJSONObject(i)
                        //val bool = jsonObject.getBoolean("login")
                        val boo : Boolean = jsonObject!!.getBoolean("login")
                        println("im inside CheckLoginas boo $boo\n\n")

                        if (boo == false) {
                            Toast.makeText(this, "Esta conta não está registada", Toast.LENGTH_SHORT).show();
                        } else if (boo == true) {
                            Toast.makeText(this, email, Toast.LENGTH_SHORT).show();
                            Toast.makeText(this, password, Toast.LENGTH_SHORT).show();
                            val intent = Intent(this, Home::class.java)
                            startActivity(intent)
                            finish()
                        }
                    }
                } catch (e: JSONException) {
                    e.printStackTrace()
                }
                }, Response.ErrorListener { error -> error.printStackTrace() })
                mQueue?.add(request)
            }
    }
}
package com.example.crowdzero
导入数据库
导入android.content.Intent
导入android.os.Bundle
导入android.view.view.OnFocusChangeListener
导入android.widget.Button
导入android.widget.Toast
导入androidx.appcompat.app.appcompat活动
导入com.android.volley.Request
导入com.android.volley.RequestQueue
导入com.android.volley.Response
导入com.android.volley.toolbox.JsonArrayRequest
导入com.android.volley.toolbox.volley
导入com.google.android.material.textfield.TextInputLayout
导入org.json.JSONArray
导入org.json.JSONException
导入org.json.JSONObject
导入java.lang.Thread.sleep
类登录名:AppCompatActivity(){
重写创建时的乐趣(savedInstanceState:Bundle?){
super.onCreate(savedInstanceState)
setContentView(R.layout.activity\u登录)
val log\U in\U btn\U log\U in=findViewById(R.id.log\U in\U btn\U log\U in)
val log_in_btn_registar=findviewbyd(R.id.log_in_btn_registar)
log_in_btn_log_in.setOnClickListener{
可可
}
登录\u btn\u registar.setOnClickListener{
val intent=intent(这个,Registo::class.java)
星触觉(意图)
}
}
私人咖啡馆{
val log_in_input_text_email=findviewbyd(R.id.log_in_input_text_email)
val log_in_input_text_password=findviewbyd(R.id.log_in_input_text_password)
val string\u email=log\u in\u input\u text\u email?。
package com.example.crowdzero
 
import Database
import android.content.Intent
import android.os.Bundle
import android.view.View.OnFocusChangeListener
import android.widget.Button
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import com.android.volley.Request
import com.android.volley.RequestQueue
import com.android.volley.Response
import com.android.volley.toolbox.JsonArrayRequest
import com.android.volley.toolbox.Volley
import com.google.android.material.textfield.TextInputLayout
import org.json.JSONArray
import org.json.JSONException
import org.json.JSONObject
import java.lang.Thread.sleep

class Login : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_login)

        val log_in_btn_log_in = findViewById<Button>(R.id.log_in_btn_log_in)
        val log_in_btn_registar = findViewById<Button>(R.id.log_in_btn_registar)

        log_in_btn_log_in.setOnClickListener {
            verificacao()

        }

        log_in_btn_registar.setOnClickListener {
            val intent = Intent(this, Registo::class.java)
            startActivity(intent)
        }
    }



    private fun verificacao() {

        val log_in_input_text_email = findViewById<TextInputLayout>(R.id.log_in_input_text_email)
        val log_in_input_text_password = findViewById<TextInputLayout>(R.id.log_in_input_text_password)
        val string_email = log_in_input_text_email?.getEditText()?.getText().toString()?.trim()
        val string_password = log_in_input_text_password?.getEditText()?.getText().toString()?.trim()

            if (string_email.isNullOrEmpty())
            {
                log_in_input_text_email.setError(" ")
            }
            else if (string_password.isNullOrEmpty())
            {
                log_in_input_text_password.setError(" ")
            }
            else
            {
                   val email = log_in_input_text_email.editText?.text.toString()
                   val password = log_in_input_text_password.editText?.text.toString()
                var mQueue: RequestQueue
                mQueue = Volley.newRequestQueue(this);
                var url = "https://myurl.com" + "/utilizador/login/" + email + "/" + password
                val request = JsonArrayRequest(Request.Method.GET, url, null, Response.Listener {
                    response ->try {
                    var jsonArray = JSONArray()
                    jsonArray = response.getJSONArray(0)
                    for (i in 0 until jsonArray.length())
                    {
                        val jsonObject : JSONObject? = jsonArray.getJSONObject(i)
                        //val user = jsonArray.getJSONObject(i)
                        //val bool = jsonObject.getBoolean("login")
                        val boo : Boolean = jsonObject!!.getBoolean("login")
                        println("im inside CheckLoginas boo $boo\n\n")

                        if (boo == false) {
                            Toast.makeText(this, "Esta conta não está registada", Toast.LENGTH_SHORT).show();
                        } else if (boo == true) {
                            Toast.makeText(this, email, Toast.LENGTH_SHORT).show();
                            Toast.makeText(this, password, Toast.LENGTH_SHORT).show();
                            val intent = Intent(this, Home::class.java)
                            startActivity(intent)
                            finish()
                        }
                    }
                } catch (e: JSONException) {
                    e.printStackTrace()
                }
                }, Response.ErrorListener { error -> error.printStackTrace() })
                mQueue?.add(request)
            }
    }
}