【问题标题】:How to show password in an EditText where current inputType is "textPassword"?如何在当前 inputType 为“textPassword”的 EditText 中显示密码?
【发布时间】:2013-07-08 09:46:34
【问题描述】:

我知道有很多与此非常相似的问题,但似乎没有一个对我有用。 当我选中该框时,我希望密码可见。当我取消选中它时,我想要点而不是实际字符。 到目前为止,我只有点。

我收到以下空指针异常。

07-08 15:08:50.441: E/AndroidRuntime(4518): FATAL EXCEPTION: main
07-08 15:08:50.441: E/AndroidRuntime(4518): java.lang.NullPointerException
07-08 15:08:50.441: E/AndroidRuntime(4518):     at com.passwordkeeper.ui.ActivityPreferenceScreen$1.onPreferenceClick(ActivityPreferenceScreen.java:65)
07-08 15:08:50.441: E/AndroidRuntime(4518):     at android.preference.Preference.performClick(Preference.java:951)
07-08 15:08:50.441: E/AndroidRuntime(4518):     at android.preference.PreferenceScreen.onItemClick(PreferenceScreen.java:215)

这是我的代码:

@SuppressWarnings("deprecation")
public void setFields(){
    mPasswordField = (EditText) findViewById (R.id.loginPwdEditText);
    showPwd = (CheckBoxPreference) findPreference("checkBox");
    showPwd.setOnPreferenceClickListener(new OnPreferenceClickListener() {
        public boolean onPreferenceClick(Preference preference) {
            if(showPwd.isChecked()){        
                Log.v("showpwd", "apparently its checked");
                mPasswordField.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD);
            }
            else{
                Log.v("showpwd", "apparently its not checked now");
                mPasswordField.setInputType( InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD );
                    }

            return true;
        }
    });

日志正在运行。因此,当我选中该框时,它实际上是在打印“显然已选中”。但随后,它卡住了,空指针异常关闭了应用程序。

任何帮助都会很有用!

【问题讨论】:

    标签: android android-edittext


    【解决方案1】:

    这段代码是错误的:

    mPasswordField.setInputType(129);
    mPasswordField.setInputType(InputType.TYPE_NUMBER_VARIATION_PASSWORD);
    

    第二组覆盖第一组。标志必须是 OR'ed:

    mPasswordField.setInputType( InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD );
    

    至于 NPE,你很可能以

    结尾
    mPasswordField
    

    null,因此例外。

    【讨论】:

    • 是的,我意识到代码是错误的。但它仍然不起作用。我重新检查了我的 mPasswordField 不为空。
    【解决方案2】:

    显示密码:

     if(showPwd.isChecked()){
        if(mPasswordField!=null)
           pass.setInputType(InputType.TYPE_CLASS_TEXT);
    }
    else
        pass.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
    

    【讨论】:

      【解决方案3】:

      尝试移动

      mPasswordField = (EditText) findViewById (R.id.loginPwdEditText); 
      

      onPreferenceClick(Preference preference)方法内

      【讨论】:

      • 不,这不起作用。它仍然给我同样的空指针异常。
      • mPasswordField 为空?你能说你在哪一行有NPE吗?
      • 在这一行:mPasswordField.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD);
      • 我的 mPasswordField 不为空。我已经重新检查过了。我可以使用 setText 并更改字段的内容。
      • 您应该使用调试器来了解哪个变量为空。但我确定 mPasswordField 为空,因为 InputType 不能。
      【解决方案4】:

      您好,只需将这 1 行代码放在您的检查条件上-

      btnCheckBox.setOnClickListener(new OnClickListener() {
      
              @Override
              public void onClick(View arg0) {
                  // TODO Auto-generated method stub
                  editPsw.setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);
              }
          });
      

      【讨论】:

      • 这对我来说是工作代码我在我的应用程序上单击按钮时使用它..如果这对您不起作用,您的代码中有一些错误..
      【解决方案5】:

      你可以试试这个代码。它工作得很好

          cb_Visible_password
                  .setOnCheckedChangeListener(new OnCheckedChangeListener() {
                      public void onCheckedChanged(CompoundButton buttonView,
                              boolean isChecked) {
                          if (isChecked) {
                             et_confirmpassword.setTransformationMethod(null);
                          } else {
      
                              et_confirmpassword
                                      .setTransformationMethod(PasswordTransformationMethod
                                              .getInstance());
                          }
                      }
                  });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-12-20
        • 1970-01-01
        • 1970-01-01
        • 2011-07-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多