如何在当前inputType为“textPassword”的EditText中显示密码?

时间:2013-07-08 09:46:35

标签: android android-edittext

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

我收到以下nullpointerexception。

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

日志正常运行。因此,当我选中此框时,它实际上正在打印“显然已经过检查”。但是,它会被卡住并且空指针异常会关闭应用程序。

任何帮助都会有用!

5 个答案:

答案 0 :(得分:0)

此代码错误:

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,因此是例外。

答案 1 :(得分:0)

显示密码:

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

答案 2 :(得分:0)

尝试移动

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

onPreferenceClick(Preference preference)方法

答案 3 :(得分:0)

您好,只需将此1行代码放在您的检查条件下即可 -

btnCheckBox.setOnClickListener(new OnClickListener() {

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

答案 4 :(得分:0)

您可以尝试使用此代码。它完美地工作

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