Java 登录活动转到下一个活动,即使条件不为真
这是我的代码,在其中我尝试移动到下一个活动,即仪表板在用户经过身份验证后,它工作正常,但即使凭据不正确或错误,它也会移动到下一个活动 我已经写下了“如果有其他条件,则移动到下一个活动,而不移动到下一个活动…”。。。。 但它仍然会转移到下一个活动我不知道为什么会发生这种情况 MainActivity.javaJava 登录活动转到下一个活动,即使条件不为真,java,android,android-intent,android-volley,Java,Android,Android Intent,Android Volley,这是我的代码,在其中我尝试移动到下一个活动,即仪表板在用户经过身份验证后,它工作正常,但即使凭据不正确或错误,它也会移动到下一个活动 我已经写下了“如果有其他条件,则移动到下一个活动,而不移动到下一个活动…”。。。。 但它仍然会转移到下一个活动我不知道为什么会发生这种情况 MainActivity.java package com.example.demo; import androidx.appcompat.app.AppCompatActivity; import android.con
package com.example.demo;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
import com.android.volley.AuthFailureError;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
import java.util.HashMap;
import java.util.Map;
public class MainActivity extends AppCompatActivity {
EditText etusername, etpassword;
String username, password;
FloatingActionButton loginbtn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
etusername = findViewById(R.id.etemail);
etpassword = findViewById(R.id.etpw);
loginbtn=findViewById(R.id.floatingloginButton);
loginbtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.d("Output 1","Button clicked");
loginverify();
}
});
}
private void loginverify() {
username = etusername.getText().toString().trim();
password = etpassword.getText().toString().trim();
Log.d("Output 2","login verify Function called");
if (username.isEmpty()) {
Toast.makeText(MainActivity.this, "Username cannnot be empty", Toast.LENGTH_SHORT).show();
Log.d("Output 3","if con 1");
return;
} else if (password.isEmpty()) {
Toast.makeText(MainActivity.this, "Password cannnot be empty", Toast.LENGTH_SHORT).show();
Log.d("Output 3","if con 2");
return;
}else{
Log.d("Output 5","inside else");
StringRequest request= new StringRequest(Request.Method.POST, "https://**url**/login.php", new Response.Listener<String>() {
@Override
public void onResponse(String response) {
// Log.d("Output 4",response);
if(!response.equalsIgnoreCase("Login Failed.......Try Again..")){
Log.d("Output 6","login failed");
Toast.makeText(getApplicationContext(), response, Toast.LENGTH_SHORT).show();
startActivity(new Intent(getApplicationContext(),Dashboard.class));
}else{
Log.d("Output 6","login passed");
Toast.makeText(getApplicationContext(), response, Toast.LENGTH_SHORT).show();
return;
}
// Toast.makeText(MainActivity.this, response, Toast.LENGTH_SHORT).show();
// startActivity(new Intent(getApplicationContext(),Dashboard.class));
//Toast.makeText(MainActivity.this, response, Toast.LENGTH_SHORT).show();
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(MainActivity.this, error.getMessage(), Toast.LENGTH_SHORT).show();
Log.d("Response error",error.getMessage().toString());
}
}
){
@Override
protected Map<String, String> getParams() throws AuthFailureError {
Map<String,String> params=new HashMap<String, String>();
params.put("login_name",username);
params.put("login_pass",password);
return params;
}
};
RequestQueue requestQueue= Volley.newRequestQueue(MainActivity.this);
requestQueue.add(request);
}
}
package com.example.demo;
导入androidx.appcompat.app.appcompat活动;
导入android.content.Intent;
导入android.os.Bundle;
导入android.util.Log;
导入android.view.view;
导入android.widget.EditText;
导入android.widget.Toast;
导入com.android.volley.AuthFailureError;
导入com.android.volley.Request;
导入com.android.volley.RequestQueue;
导入com.android.volley.Response;
导入com.android.volley.VolleyError;
导入com.android.volley.toolbox.StringRequest;
导入com.android.volley.toolbox.volley;
导入com.google.android.material.floatingactionbutton.floatingactionbutton;
导入java.util.HashMap;
导入java.util.Map;
公共类MainActivity扩展了AppCompatActivity{
编辑文本etusername,etpassword;
字符串用户名、密码;
浮动操作按钮登录;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
etusername=findviewbyd(R.id.etemail);
etpassword=findviewbyd(R.id.etpw);
loginbtn=findviewbyd(R.id.floatingloginButton);
loginbtn.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
Log.d(“输出1”,“点击按钮”);
登录验证();
}
});
}
私有void loginverify(){
username=etusername.getText().toString().trim();
password=etpassword.getText().toString().trim();
d(“输出2”,“调用登录验证函数”);
if(username.isEmpty()){
Toast.makeText(MainActivity.this,“用户名不能为空”,Toast.LENGTH_SHORT.show();
日志d(“输出3”,“如果con 1”);
返回;
}else if(password.isEmpty()){
Toast.makeText(MainActivity.this,“密码不能为空”,Toast.LENGTH_SHORT.show();
日志d(“输出3”,“如果con 2”);
返回;
}否则{
日志d(“输出5”,“内部其他”);
StringRequest=newStringRequest(request.Method.POST,“https://**url**/login.php”,new Response.Listener(){
@凌驾
公共void onResponse(字符串响应){
//Log.d(“输出4”,响应);
如果(!response.equalsIgnoreCase(“登录失败…….重试”)){
Log.d(“输出6”,“登录失败”);
Toast.makeText(getApplicationContext(),response,Toast.LENGTH_SHORT.show();
startActivity(新意图(getApplicationContext(),Dashboard.class));
}否则{
Log.d(“输出6”,“登录通过”);
Toast.makeText(getApplicationContext(),response,Toast.LENGTH_SHORT.show();
返回;
}
//Toast.makeText(MainActivity.this,response,Toast.LENGTH_SHORT).show();
//startActivity(新意图(getApplicationContext(),Dashboard.class));
//Toast.makeText(MainActivity.this,response,Toast.LENGTH_SHORT).show();
}
},new Response.ErrorListener(){
@凌驾
公共无效onErrorResponse(截击错误){
Toast.makeText(MainActivity.this,error.getMessage(),Toast.LENGTH_SHORT.show();
Log.d(“响应错误”,error.getMessage().toString());
}
}
){
@凌驾
受保护的映射getParams()引发AuthFailureError{
Map params=新的HashMap();
参数put(“登录名”,用户名);
参数put(“登录密码”);
返回参数;
}
};
RequestQueue RequestQueue=Volley.newRequestQueue(MainActivity.this);
添加(请求);
}
}
}
下面是我的php代码。。。抱歉,代码太弱了
<?php
require "../dbcn.php";
$user_name = $_POST["login_name"];
$user_pass = $_POST["login_pass"];
$sql_query = "select Firstname,Lastname from users where emailid like '$user_name' and password like '$user_pass';";
$result = mysqli_query($db_conx,$sql_query);
if(mysqli_num_rows($result) >0 )
{
$row = mysqli_fetch_assoc($result);
$name =$row["Firstname"]." ".$row["Lastname"];
echo "Login Success..Welcome ".$name;
}
else
{
echo "Login Failed.......Try Again..";
}
?>
我建议您在onResponse方法中使用JSON格式,并使用equals()而不是equalsIgnoreCase。onResponse方法需要一些时间,具体取决于您的响应数据和internet速度。如果您在响应中使用布尔值,这是最好的条件。比较String
结果是非常非常错误的方法。。。除此之外,这个if
也是非常不合适的
if(!response.equalsIgnoreCase("Login Failed.......Try Again..")){
}
<> P>>代码> String < /C> >将打开下一个<代码>活动< /代码>,例如当你在服务器端改变一个字符时,或者中间的连接断开,你只会得到<<代码>字符串< /代码>的一半…(理论上)
为了让用户进入某个隐藏/限制区域,您应该始终使用积极、明确的条件,而不是相反的否定。。。尝试使用if(response.startsWith(“Login Success”)
,但仍然比较String
s不是个好主意。。。(这就是为什么你投了反对票)
考虑使用一些标准来格式化文本,如XML或JSON,或者只返回一些int
代码,例如0
用于积极登录、-1
密码不匹配、-2
未找到用户等,这取决于您的目的。当然,作为登录条件,如果(结果==0)
,则使用,而不是代码>所有其他可能的代码…现在是开始使用调试器的时候。但是您在OnResponse
中错误地使用了Log
;如果
@HamidSj我正在使用n,则在的第一个作用域中记录失败