2013-07-08 35 views
0

我知道有很多問題與此非常相似,但後來他們都沒有爲我工作。 當我檢查框時,我想讓密碼可見。當我取消選中時,我需要點而不是實際的字符。 截至目前,我只有點。如何在當前inputType爲「textPassword」的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; 
     } 
    }); 

日誌工作。所以當我檢查盒子時,它實際上正在打印「顯然它的檢查」。但是,它會卡住,空指針異常會關閉應用程序。

任何幫助將是有用的!

回答

0

該代碼是錯誤的:

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

作爲第二組覆蓋第一個。標誌必須或運算:

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

對於NPE,你最有可能

mPasswordField 

null,因此異常結束。

+0

是的,我意識到代碼是錯誤的。但它仍然不起作用。我重新檢查過我的mPasswordField不是null。 –

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

嘗試移動

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

onPreferenceClick(Preference preference)方法

+0

不,那是行不通的。它仍然給我相同的nullpointerexception。 –

+0

mPasswordField爲空?你能說你在哪一行有NPE嗎? – Divers

+0

在這一行: mPasswordField.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD); –

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

這是我的工作代碼我正在使用這個在我的應用程序上點擊一個按鈕.. 如果這不適合你在你的代碼中有一些錯誤.. –

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()); 
        } 
       } 
      }); 
相關問題