2011-08-03 52 views
1

我有2個活動,其中一個是用戶可以通過名爲Password的編輯文本框更新或設置新密碼,另一個活動是登錄屏幕,他們必須輸入密碼,然後使用名爲LogIn的共享首選項進行驗證。密碼活動工作正常。我可以更新或設置新密碼,但登錄活動與用戶輸入值不同。簡而言之,當他們使用密碼登錄時設置了密碼後,它說密碼不正確,而不是密碼。我發佈了兩個活動。使用SharedPreferences製作登錄屏幕需要幫助嗎?

public class Password extends Activity implements View.OnClickListener{ 


public static final String PASSWORD_PREF_KEY ="passwd"; 

private TextView messages; 
private EditText pass1; 
private EditText pass2; 
Button button1, button2; 

@Override 
public void onCreate(Bundle icicle) { 
    super.onCreate(icicle); 
    setContentView(R.layout.mainin); 

    messages = (TextView) findViewById (R.id.text1); 
    pass1 = (EditText) findViewById(R.id.password); 
    pass2 = (EditText) findViewById (R.id.password_confirm); 

    button1 = (Button) findViewById(R.id.ok); 
    button2 = (Button) findViewById(R.id.button1); 

    button1.setOnClickListener(this); 
    button2.setOnClickListener(this); } 


    public void onClick(View v){ 
     switch(v.getId()){ 
     case R.id.button1: 
      startActivity(new Intent(Password.this,LogIn.class)); finish(); 
     case R.id.ok: 
     String p1 = pass1.getText().toString(); 
     String p2 = pass2.getText().toString(); 

     if (p1.equals(p2)) { 
      if (p1.length() >=6 || p2.length() >=6) { 

       SharedPreferences settings = getSharedPreferences(Password.PASSWORD_PREF_KEY,0); 
       SharedPreferences.Editor editor = settings.edit(); 

       editor.putBoolean(Password.PASSWORD_PREF_KEY,true);  


       editor.commit(); 
       messages.setText("Password updated!"); 
      } 
      else 
       messages.setText("Passwords must be at least 6 characters"); 
     } 
     else{ 
      pass1.setText(""); 
      pass2.setText(""); 
      messages.setText("Passwords do not match"); 
      } 
     } 
};  

public class LogIn extends Activity { 

private EditText pass1; 

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.password); 

    pass1 = (EditText) findViewById(R.id.et_pw); 

    SharedPreferences passwd = getSharedPreferences(Password.PASSWORD_PREF_KEY,0); 
    final String p3 = passwd.getString(Password.PASSWORD_PREF_KEY,null); 
    final String p1 = pass1.getText().toString(); 

    Button page1 = (Button) findViewById(R.id.btn_login); 
    page1.setOnClickListener(new View.OnClickListener() {   
     public void onClick(View view) { 
      if (p3.equals(p1)) {  
       startActivity(new Intent(LogIn.this,Main.class)); 
       } 
      else {  
       Toast.makeText(getApplicationContext(),"Incorrect Password",Toast.LENGTH_LONG).show(); 
       } 
      }; 
      }); 
    }; 
    } 

回答

0

它看起來像你把一個布爾值真正的共享首選項,而不是把密碼字符串。因此,當您將編輯文本字符串與共享首選項進行比較時,它們不會相互平等。

+0

你說的是editor.putBoolean(Password.PREF_KEY,true)是否正確?我需要改變它到什麼? – Jonathan

+0

那麼你現在的邏輯是,當你輸入一個新的密碼時,你可以將自己的偏好放入偏好中。如果你要檢查他們是否創建了密碼,那麼這很好,但是你需要檢查密碼是否匹配。所以,而不是把editor.putString(Password.PASSWORD_PREF_KEY,P1);這很好地保存密碼爲一個字符串。 – Pengume

+0

我將它改爲editor.putString(Password.PASSWORD_PREF_KEY,p1);像你建議,但我仍然得到不正確的密碼:/ – Jonathan