【问题标题】:Why my password EditText don't save my input?为什么我的密码 EditText 不保存我的输入?
【发布时间】:2021-07-29 16:01:48
【问题描述】:

所以,当我在密码 EditText 中输入我的文本后,它不会被保存。但是其余的 EditText 输入效果很好。我对密码 EditText 做错了什么? 我尽我所能,但我总是得到空密码。

公共类 MainActivity 扩展 AppCompatActivity {

public Spinner countriesList ;
public Button btnRegistration, pickImgBtn;
private ConstraintLayout mainConstrain;
private EditText name , email, password, reEnterPassword;
private CheckBox iAgree;
public RadioGroup radioGroup;


private static final int PICK_IMAGE = 100;
private ImageView imageView;
private Uri imageUri;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


    countriesList=findViewById(R.id.countrySpinnerId);

    mainConstrain=findViewById(R.id.mainConstrainId);

    btnRegistration=findViewById(R.id.btnRegisterId);
    pickImgBtn=findViewById(R.id.pickImgBtnId);

    //Input
    name=findViewById(R.id.nameId);
    email=findViewById(R.id.emailId);
    password=findViewById(R.id.passwordId);
    reEnterPassword=findViewById(R.id.reEnterPasswordId);

    radioGroup=findViewById(R.id.radioGroupId);

    //CheckBox
    iAgree=findViewById(R.id.iAgreeId);

    imageView=findViewById(R.id.imageView);

    setCountriesList(countriesList);





    btnRegistration.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            showSnackbar("You have registered: ");
            checkInputData(radioGroup,iAgree,password,reEnterPassword,name,email);
            addNewPeople(name,email,password,countriesList,radioGroup);
            setStartData(name,email,password,reEnterPassword,iAgree);
        }
    });

这是代码的第二部分!

public void addNewPeople(EditText name, EditText email, EditText password,Spinner contries, RadioGroup group) {
    if (!(name.getText().toString().equals("")) && !(email.getText().toString().equals("")) && !(password.getText().toString().equals("")))
       SecondaryActivity.peoples.add(new People(name.getText().toString(), email.getText().toString(),password.getText().toString(),contries.getSelectedItem().toString() , group.getCheckedRadioButtonId()));
    else
        showSnackbar("Fill all fields");

}

这是点击按钮后设置数据为空的代码。

  private void setStartData(EditText name,EditText email,EditText password, EditText reEnterPassword, CheckBox iAgree) {
    name.setText("");
    email.setText("");
    password.setText("");
    reEnterPassword.setText("");
    iAgree.setChecked(false);
}

private void checkInputData(RadioGroup radioGroup,CheckBox iAgree, EditText password, EditText reEnterPassword,EditText name,EditText email) {
   if (radioGroup.getCheckedRadioButtonId() == -1  )
     radioGroup.setBackgroundColor(Color.RED);

   if (radioGroup.getCheckedRadioButtonId() != -1 )
       radioGroup.setBackgroundColor(Color.TRANSPARENT);

   if (!(iAgree.isChecked()))
       iAgree.setTextColor(Color.RED);

    if (iAgree.isChecked())
        iAgree.setTextColor(Color.BLACK);

    // is Password same
    if (password.getText().toString().equals(reEnterPassword.getText().toString())) {
        password.setText("");
        reEnterPassword.setText("");
        password.setHint("Password are not same");
        password.setHintTextColor(Color.RED);
    }

    //Input name, email and pass emptiness check

        if (name.getText().toString().equals("")) {
            name.setHint("Unesi ime");
            name.setHintTextColor(Color.RED);
        }else{
            name.setHintTextColor(Color.GRAY);
        }

        if (email.getText().toString().equals("")){
            email.setHint("Unesi email");
            email.setHintTextColor(Color.RED);
        }
        else{
            email.setHintTextColor(Color.GRAY);
        }


        if (password.getText().toString().equals("")){
            password.setHint("Unesi password.....");
            password.setHintTextColor(Color.RED);
        }
        else{
            password.setHintTextColor(Color.GRAY);
        }
}

希望有人能帮忙

【问题讨论】:

    标签: java android android-edittext gettext


    【解决方案1】:

    根据你的说法,我假设这段代码一直在执行:

    if (password.getText().toString().equals("")){
                password.setHint("Unesi password.....");
                password.setHintTextColor(Color.RED);
            }
    

    我说的对吗?

    您确定 findViewById 中使用的 id 是正确的吗? 如果我是你,我会在 setOnClickListener 调用 checkInputData 中放置一个断点。

    【讨论】:

    • 是的,我的这段代码我一直执行。我检查了 findViewById,它很好。
    【解决方案2】:

    我认为问题出在你的逻辑上。

    // is Password same
    if (password.getText().toString().equals(reEnterPassword.getText().toString())) {
        password.setText("");
        reEnterPassword.setText("");
        password.setHint("Password are not same");
        password.setHintTextColor(Color.RED);
    }
    

    应该是这样的

    // if the Password is not same
    if (!password.getText().toString().equals(reEnterPassword.getText().toString())) {
        password.setText("");
        reEnterPassword.setText("");
        password.setHint("Password are not same");
        password.setHintTextColor(Color.RED);
    }
    

    密码和重新输入的密码必须相同

    【讨论】:

      【解决方案3】:

      你应该像这样检查密码是否为空:

      if (!TextUtils.isEmpty(edittext.gettext())){
          //Your logic here
      }
      else {
          //Do something else.
      }
      
      • TextUtils.isEmpty() 方法可用于检查字符串是否为空。您也可以使用 str.equals(""),但使用 edittext,如果您从 edittext 获取空字符串,可能会导致崩溃。所以 TextUtils.isEmpty() 是这里最安全的方法。

      • 此外,在相关块中放置一些 Toast 或 Log 以检查您从密码编辑文本中获得的值。它可以让您清楚地了解您获得的价值。

      是的!您的密码检查逻辑也是错误的。所以也要检查一下。 :)

      【讨论】:

        【解决方案4】:

        这个逻辑的问题

        // is Password same
            if (password.getText().toString().equals(reEnterPassword.getText().toString())) {
                password.setText("");
                reEnterPassword.setText("");
                password.setHint("Password are not same");
                password.setHintTextColor(Color.RED);
            }
        

        只是你不见了!运营商

        // is Password same
            if (!password.getText().toString().equals(reEnterPassword.getText().toString())) {
                password.setText("");
                reEnterPassword.setText("");
                password.setHint("Password are not same");
                password.setHintTextColor(Color.RED);
            }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2010-10-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-04-03
          • 2023-02-10
          相关资源
          最近更新 更多