簡體   English   中英

即使在android中條件為真,其他部分也會運行

[英]Else part running even if condition is true in android

我想實現一個系統,當他們注冊時,他們提供他們的用戶名、電話號碼和密碼以及一些其他數據,並且所有這些都被保存到數據庫中。 這樣用戶就可以使用他們的用戶名/電話和密碼登錄

我正在檢查輸入的用戶名和密碼是否等於 firebase 數據庫中的用戶名和密碼,但即使 if 部分為真,它也會運行 else 部分,幫助我解決使用 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))這僅在用戶名不等於 null 時才有效,這意味着如果您輸入您描述的 uphone 號碼 username 可能是用戶名/電話號碼,這行不通。 如果我們使用&&運算符,如果第一個條件失敗,它不會檢查其余的條件,簡單的它會轉到其他條件。 請檢查您的用戶名值。

根據您的解釋重寫 if 語句:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM