Android 登录按钮需要点击两次才能登录
我正在AndroidStudio上制作一个应用程序,我需要在他们登录该应用程序时验证凭据。该应用程序使用API并验证凭据,我在数据库中创建了此功能以检查某人的电子邮件和密码: (postgresql) 我正在通过以下CheckLoginas函数解析数据: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
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)
}
}
}