0

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

我收到以下空指针异常。

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

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

任何帮助都会很有用!

4

5 回答 5

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

于 2013-07-08T09:52:50.033 回答
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);
于 2013-07-08T09:53:15.670 回答
0

尝试移动

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

内部onPreferenceClick(Preference preference)方法

于 2013-07-08T09:54:06.353 回答
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());
                    }
                }
            });
于 2013-07-08T10:20:23.257 回答
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);
        }
    });
于 2013-07-08T09:57:40.350 回答