2013-01-23 87 views
2

我要清除所有我把我的第一次活動sharedpref並刪除它的第二個活動。但明確的功能無法正常工作。這裏是我的代碼的Android不清除sharedpreference

public class MyActivity extends Activity implements View.OnClickListener { 
    /** 
    * Called when the activity is first created. 
    */ 

    public static final String PREFS_NAME = "ResumePrefs"; 

    SharedPreferences settings; 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     ((Button)findViewById(R.id.button)).setOnClickListener(this); 

    } 

    @Override 
    protected void onResume() { 
     try{ 
      Toast. makeText(this,settings.getString("answer_id",""),Toast.LENGTH_LONG).show(); 
     }catch (Exception e){ 
      Toast.makeText(this,e.toString(),Toast.LENGTH_LONG).show(); 
     } 
     super.onResume(); 
    } 

    @Override 
    public void onClick(View view) { 
     switch (view.getId()){ 
      case R.id.button: 
       settings = getSharedPreferences(PREFS_NAME, 1); 
       SharedPreferences.Editor editor = settings.edit(); 
       editor.putString("answer_id", "This is a test"); 
       editor.commit(); 
        Intent intent = new Intent(this,destroyPref.class); 
       startActivity(intent); 
       break; 
     } 
    } 
} 

和my2nd activty:

public class destroyPref extends Activity { 
    public static final String PREFS_NAME = "ResumePrefs"; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.destroy); 

    } 

    @Override 
    public void onBackPressed() { 
     SharedPreferences settings = this.getSharedPreferences(PREFS_NAME,1); 
     settings.edit().clear(); 
     settings.edit().commit(); 
     super.onBackPressed(); 
    } 

    @Override 
    protected void onResume() { 
     SharedPreferences settings = this.getSharedPreferences(PREFS_NAME,1); 
     settings.edit().clear(); 
     settings.edit().commit(); 
     super.onResume(); 
    } 
} 

一旦我按了後退按鈕,我會回去的主要活動和預期偏好值被清除,除非我再次按下按鈕。我嘗試了bot後援並恢復,但仍然存在sharedpref值..我錯過了什麼?謝謝。

+0

你確定onBackPressed被調用? – RvdK

+0

你用'settings.edit()。apply()'來代替commit(); ? –

+0

是的,我確信..我剛剛在這裏放了一杯吐司,並按下了後退按鈕。 – thenewbie

回答

2

試試這個:

SharedPreferences.Editor editor = settings.edit(); 
editor.clear(); 
editor.commit(); 

感謝。

+0

您需要提交更改才能使用。 – DeeV

+1

不工作..價值仍然存在.. – thenewbie

+0

它的工作表示感謝。你知道如何徹底destryo它嗎? – thenewbie

0

當您恢復您的第一個活動,您不刷新settings。因此它沒有讀入新的值。

4

settings.edit()創建一個新的編輯器。 commit()是在不同的編輯器上完成的,然後是你的clear()。您需要:

SharedPreferences.Editor editor = settings.edit(); 
editor.clear(); 
editor.commit(); 
3

你這裏面臨的問題是,與代碼:

SharedPreferences settings = this.getSharedPreferences(PREFS_NAME,1); 
    settings.edit().clear(); 
    settings.edit().commit(); 

你正在創建兩個編輯。一個被設置爲清除,但是你永遠不會提交,所以不清楚。其他提交,但你從來沒有設置它做任何事情。

SharedPreferences settings = this.getSharedPreferences(PREFS_NAME,1); 
    settings.edit().clear().commit(); 

這將創建一個編輯器,將其設置爲清除,然後提交更改。我是漂亮的確定您返回時價值將被清空。儘管如此,我並不真誠地知道,所以請發佈結果,我將編輯此答案。

+0

ahm我認爲它只是清除了pref值的值,但不會將其摧毀。導致吐司返回一個空白「」,而不是一個例外,因爲它爲空。我瘦了remove()會破壞。謝謝你的方式。 – thenewbie

+0

這可能是因爲你設置了一個默認值「」,這是它在密鑰找不到時會返回的值。 – DeeV