登录 activity 进入下一个 activity 即使条件不成立

Login activity goes to next activity even if the condition is not true

这是我的代码,我试图在其中移动到 Next activity,即 Dashboard 在用户通过身份验证后它运行良好但它移动到下一个 activity 即使凭据不正确或错误...

我已经写了 if else 条件移动到下一个 activity 而不是移动到下一个 activity... 但它仍然移动到下一个 activity 我不知道为什么会这样...

MainActivity.java

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);
    }

}

}

下面是我的 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 方法需要一些时间,具体取决于您的响应数据和互联网速度。如果您在响应中使用布尔值,这是最好的条件。

比较 String 结果是非常非常错误的方法...此外 if 也非常不合适

if(!response.equalsIgnoreCase("Login Failed.......Try Again..")){

}

因此 String 之上的任何其他内容将在 Activity 之后打开,例如当你在服务器端改变一个字符,或者连接在中间断开时,你只会得到一半 String...(理论上)

为了让用户进入某些 hidden/restricted 区域,您应该始终使用肯定的、明确说明的条件,而不是与拒绝相反...尝试使用 if(response.startsWith("Login Success")),但仍要比较 Strings这不是个好主意......(这就是你得到反对票的原因)

考虑使用一些标准来格式化文本,例如 XML 或 JSON,或者只是 return 一些 int 代码,例如0 用于肯定登录,-1 密码不匹配,-2 未找到用户等取决于您的目的。当然,在登录条件下使用 if(result==0),而不是所有其他可能代码的 !...