2017-02-26 81 views
2

在我的應用程序中,我試圖將鍵值保存爲零或一個,具體取決於是否選中了複選框。我在不同的活動中檢索這些值。然而,當我嘗試檢索的價值,我得到一個空字符串:鍵值存儲數據未檢索

在活動1保存鍵值(ScienceCoursesCheck):

public void setDefaults(String key, String value) { 
    SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this); 
    SharedPreferences.Editor editor = sharedPref.edit(); 
    editor.putString(key, value); 
    editor.commit(); 

} 
public void onCheckboxClicked(View view) { 
    // Is the view now checked? 
    boolean checked = ((CheckBox) view).isChecked(); 

    // Check which checkbox was clicked 
    switch(view.getId()) { 
     case R.id.checkBox_APBio: 
      if (checked) { 
       setDefaults("APBio", "1"); 
      } 
      else { 
       setDefaults("APBio", "0"); 
       break; 
      } 
}} 

在活動2檢索鍵值(是MyHome):

public static String getDefaults(String key, Context context) { 
    SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context); 
    return preferences.getString(key, null); 
} 

public void myMethod() { 
    SharedPreferences myPrefs = getSharedPreferences("ScienceCoursesCheck", MODE_PRIVATE); 
    String APBio = myPrefs.getString("APBio",""); 
    if (APBio.equals("1")){ 
     Button myButton = new Button(this); 
     myButton.setText(APBio); 
     RelativeLayout ll = (RelativeLayout)findViewById(R.id.activity_my_home); 
RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT); 
     ll.addView(myButton, lp); 
    } 
    } 

第二項活動是否訪問正確的SharedPreferences文件?

回答

0

使用下面的代碼sharedpreference。致電

Util。saveInfo(activityContext,_key,_value)

當您要保存信息。然後調用

Util.getInfo(getApplicationContext(),_鍵)

獲得的信息。

public class Util{ 
public static void saveInfo(Context context, String key, String value) 
{ 
    try 
    { 
     PreferenceManager.getDefaultSharedPreferences(context).edit().putString(key, value).apply(); 
    } 
    catch (Exception ex) 
    { 
     Log.e(TAG," saveInfo "+ex+""); 
    } 
} 
public static String getInfo(Context context, String key) 
{ 
    try { 
     return PreferenceManager.getDefaultSharedPreferences(context).getString(key,""); 
    } 
    catch (Exception e) 
    { 
     e.printStackTrace(); 
    } 
    return ""; 
} 
0

的問題是因爲當你存儲在SharedPreferences的項目使用的是

PreferenceManager.getDefaultSharedPreferences 

但是當你檢索它們使用的是

getSharedPreferences("ScienceCoursesCheck", MODE_PRIVATE); 

這是兩個不同SharedPreferences文件。嘗試使用getSharedPreferences("ScienceCoursesCheck", MODE_PRIVATE);作爲您的設置方法。或者,也許你想用你的getDefaults()方法activity 2而不是myPrefs

0

那是因爲你在DefaultSharedPreferences文件

SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this); 

節約和另一個名爲文件中檢索"ScienceCoursesCheck"

SharedPreferences myPrefs = getSharedPreferences("ScienceCoursesCheck", MODE_PRIVATE); 

和他們不是同一個文件!

請參閱本answer

==== getSharedPreferencesgetDefaultSharedPreferences的區別

解決方案要麼總是使用DefaultSharedPreferences或總是使用名爲"ScienceCoursesCheck"文件。

0

的問題是你在DefaultSharedPreference保存價值,並試圖找回從ScienceCoursesCheck偏好文件中的值。

請嘗試下面的代碼setDefaults方法。getDefaultSharedPreferencegetSharedPreference方法是不同的。

看到這個link的差異。

public void setDefaults(String key, String value) { 
     SharedPreferences sharedPref = getApplicationContext().getDefaultSharedPreferences("ScienceCoursesCheck", MODE_PRIVATE); 
     SharedPreferences.Editor editor = sharedPref.edit(); 
     editor.putString(key, value); 
     editor.commit(); 

    } 

希望這有助於你...