Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/209.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 否则即使条件在android中为真,部分也会运行_Java_Android - Fatal编程技术网

Java 否则即使条件在android中为真,部分也会运行

Java 否则即使条件在android中为真,部分也会运行,java,android,Java,Android,我想实现一个系统,当他们注册时,他们提供用户名、电话号码和密码以及一些其他数据,所有数据都保存到数据库中。这样用户就可以使用用户名/电话和密码登录 我正在检查输入的用户名和密码是否与firebase数据库中的用户名和密码相同,但它会运行else部分即使部分为true,也请帮助我解决使用finish()和break语句尝试的问题 import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity;

我想实现一个系统,当他们注册时,他们提供用户名、电话号码和密码以及一些其他数据,所有数据都保存到数据库中。这样用户就可以使用用户名/电话和密码登录

我正在检查输入的用户名和密码是否与firebase数据库中的用户名和密码相同,但它会运行else部分即使部分为true,也请帮助我解决使用finish()和break语句尝试的问题

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;

public class MainActivity extends AppCompatActivity {
    ImageView logo;
    public EditText loginPhone, logInpasswd;
    //Button btnLogIn;
    TextView signup,phonetext,btnLogIn;
    DatabaseReference dbview;
    SessionManager sessionManager;
    private static final String TAG = "MainActivity";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        getSupportActionBar().hide();
        //SessionManager session = new SessionManager(MainActivity.this);
        dbview=FirebaseDatabase.getInstance().getReference("Users");
        logo = (ImageView) findViewById(R.id.imageView);
        logo.animate().rotation(360).start();
        loginPhone = findViewById(R.id.loginPhone);
        logInpasswd = findViewById(R.id.loginpaswd);
        btnLogIn = findViewById(R.id.btnLogIn);
        signup = findViewById(R.id.SignIn);
        logo.setImageResource(R.drawable.mgenomics);
        signup.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent in = new Intent(MainActivity.this, register.class);
                startActivity(in);
            }
        });
        btnLogIn.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v){
            verifyUser();
            }
        });
    }
    public void verifyUser(){
        sessionManager = new SessionManager(MainActivity.this);

        dbview.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot snapshot) {
            for(DataSnapshot data:snapshot.getChildren()) {
                User user = data.getValue(User.class);
                String Phone = loginPhone.getText().toString().trim();
                String Passwd = logInpasswd.getText().toString().trim();
                String uphone = user.getuPhone();
                String upass = user.getuPass();
                String uname = user.getuUname();
                String uid = user.getuID();
                //Bundle data_pass = new Bundle();
                // data_pass.putString("name",uname);

                if(uname!=null && (uname.equals(Phone) || uphone.equals(Phone))  && upass.equals(Passwd)){
                    Intent i = new Intent(MainActivity.this,logged_user.class);
                    sessionManager.saveSession(uname);
                    sessionManager.loginUser(uname,true);
                    startActivity(i);
                    finish();
                    break;
                    }
                else
                {
                    logInpasswd.setError("Invalid Username/Password");
                }

            }

            }

            @Override
            public void onCancelled(@NonNull DatabaseError error) {
                Log.i(TAG, "onCancelled: Error: " + error.getMessage());
            }
        });

    }
}
在if语句
if(uname!=null&&(uname.equals(Phone)| | uphone.equals(Phone))&&upass.equals(Passwd))
中,只有当only username不等于null时,这才有效。这意味着,如果您输入您所描述的uphone号码,用户名可能是用户名/电话号码,则不起作用。如果我们使用
&&
运算符,如果第一个条件失败,它将不会检查其余条件,而是转到其他条件。请检查用户名的值

根据您的解释改写了if语句:

 if(((uname!=null && uname.equals(Phone)) || ( uphone !=null|| uphone.equals(Phone)))  && upass.equals(Passwd))

你试过调试吗?uname.equals(Phone)这里您使用的是区分大小写的方法。因此,在调试时也要检查uname和Phone with case。在找到匹配的用户名之前,您检查的每个不匹配的用户名都会调用else,这是您想要的吗?似乎更可能的情况是,在尝试所有用户但未找到任何用户之前(在for循环结束后)
(uname.equals(Phone)
?或者可能是
(uname.equals(user)
如果
语句通常按编码方式工作:检查您的假设和预期逻辑。