2013-09-24 90 views
0

我正在開發一款Android應用程序,該應用程序分爲兩部分,可供男性和女性使用。用戶選擇想要的部分活動。例如,如果用戶是男人,他選擇男人的一部分,如果她是女人,她點擊女人按鈕,女人的頁面出現。該應用程序不記得共享偏好設置值

爲了避免打擾用戶,我放了一個複選框,我說下次記住我的選擇。很普遍的事情...

我試圖使用共享首選項,但它不工作。它每次打開應用程序時都會提問。下面是代碼:

我問這個問題的活動

View checkBoxView = View.inflate(this, R.layout.activity_menu, null); 
    CheckBox checkBox = (CheckBox) checkBoxView.findViewById(R.id.checkbox); 
    checkBox.setOnCheckedChangeListener(new OnCheckedChangeListener() { 

     @Override 
     public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
      if(isChecked){ 
       SharedPreferences.Editor prefEditor = getPreferences(MODE_PRIVATE).edit(); 
       prefEditor.putString("Remember", "Checked"); 
       prefEditor.commit(); 
      } 
     } 
}); 

它決定要問的問題或

SharedPreferences sp = getPreferences(MODE_PRIVATE); 
        String str1 = sp.getString("Remember", ""); 
        String str2 = sp.getString("Hacc", ""); 

        if (str1 == "") { 
         Intent menuIntent = new Intent(
           "com.uygulama.hacc.MenuActivity"); 
         startActivity(menuIntent); 
        } 
        else{ 
         if(str2 == "Hacc"){ 
          Intent mainIntent = new Intent(
            "com.uygulama.hacc.HaccActivity"); 
          startActivity(mainIntent); 
         } 
         else{ 
          Intent mainIntent = new Intent(
            "com.uygulama.hacc.UmreActivity"); 
          startActivity(mainIntent); 
         } 
        } 

我之前打開選擇activty防濺活動新的Android上,所以,任何幫助將不勝感激。

回答

1

我想你正在使用2種不同的活動來編寫和閱讀共享偏好。如果您從Activity撥打getPreferences,它會打開與該活動關聯的偏好設置。嘗試改變喜好來訪問:

// read 
SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); 
String str1 = settings.getString("Remember", ""); 

// write 
SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); 
SharedPreferences.Editor editor = settings.edit(); 
editor.putString("Remember", "Checked"); 
editor.commit(); 

另外,在比較字符串時,使用equals

str2.equals("Hacc") 

否則你比較引用。

+0

getDefaultSharedPreferences(本);不工作。它可能是getDefaultSharedPreferences(getApplicationContext());?好的,你編輯它。讓我再嘗試一次。 – user2870

+0

是的,我也注意到了。編輯我的答案。 – Szymon

+0

它仍然沒有讀取任何東西.. – user2870

0

您在第一堂課中保存的內容缺乏SharedPreferences中的命名空間。

嘗試類似:

SharedPreferences prefs = getSharedPreferences("AppName", MODE_PRIVATE); 
prefs.edit().putBoolean("Remember", true).commit(); 

與檢索:

SharedPreferences sPrefs = getSharedPreferences("AppName", 0); 
Boolean bCheck = sPrefs.getBoolean("Remember", false); 
1

你應該使用的,而不是共享的getPreferences喜好的活動之間共享的喜好。

從Android的文檔: http://developer.android.com/reference/android/app/Activity.html

活動持續狀態與方法 的getPreferences(INT)管理,讓您檢索和修改一組與活動相關 名稱/值對。要使用 在多個應用程序組件(活動, 接收器,服務,提供者)之間共享的首選項,可以使用底層的 Context.getSharedPreferences()方法檢索以特定名稱存儲的首選項對象 。 (請注意,這是不可能要共享應用程序包 設定數據 - 爲您將需要一個 內容提供商。)