无法从xml加载Sharedpreferences

时间:2013-07-05 08:37:51

标签: android sharedpreferences

我正在尝试创建PreferenceActivity并使用xml文件加载可由用户配置的首选项。但不知何故,“defaultvalue”没有正确加载。这是我的preferenceActivity代码:

public class Instellingen extends PreferenceActivity{

public static final int mode= Activity.MODE_PRIVATE;
public static final String KEY_LOCKACTIONS = "lockactions";
public static final String KEY_VERSIE = "Versie"; 
public static final String KEY_CHAUFFEUR = "Chauffeur";
public static final String KEY_LATITUDE = "Latitude";
public static final String KEY_LONGITUDE = "Longitude";
public static final String KEY_NEEDLOCUPDATE = "NeedLocUpdate";
public static final String KEY_NEEDAPPUPDATE = "NeedAppUpdate";
public static final String KEY_NEEDSYNC = "NeedSync";
public static final String KEY_SYNCCONTENT = "NeedSyncContent";
public static final String KEY_THREADCOUNT = "ThreadCount";
public static final String KEY_FREESYNCTHREAD = "FreeSyncThread";
public static final long version = 0;

static SharedPreferences mySharedPreferences;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    addPreferencesFromResource(R.xml.preferences);
    mySharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
}

public static Boolean GetBoolean(Context context, String Name) 
{
    mySharedPreferences = context.getSharedPreferences("KCStandaardSettings", mode);
    return mySharedPreferences.getBoolean(Name, false);
}

这是我试图获取值的代码段:

@Override
public void run() {
    Boolean music = Instellingen.GetBoolean(contextAfterThread, "noteSound");
    for (int i = 0; i < number; i++) {
        try {
            sleep(500);
        } catch (InterruptedException e) {
            TLogFile.appendLog("e", "log_tag", "Error sleeping soundthread " + e.toString());
            e.printStackTrace();
        }
        if(music){
            TSound.PlayNotification(contextAfterThread);
        }
    } 
}

这是xml本身(文件名是preferences.xml)

<CheckBoxPreference
    android:id="@+id/cbRemainLoggedPreferences"
    android:defaultValue="false"
    android:key="RemainLoggedIn"
    android:title="@string/remainLoggedIn" />

<CheckBoxPreference
    android:id="@+id/cbNotificationSound"
    android:defaultValue="true"
    android:key="noteSound"
    android:title="@string/Sound" />

<!-- <CheckBoxPreference
    android:id="@+id/cbWidgetAllPreferences"
    android:defaultValue="true"
    android:key="cbWidgetAll"
    android:title="Toon in de Widget de tab met alle berichten" />
<CheckBoxPreference
    android:id="@+id/cbWidgetUnreadPreferences"
    android:defaultValue="true"
    android:key="cbWidgetUnread"
    android:title="Toon in de Widget de tab met ongelezen berichten" />
<CheckBoxPreference
    android:id="@+id/cbWidgetReadPreferences"
    android:defaultValue="true"
    android:key="cbWidgetRead"
    android:title="Toon in de Widget de tab met gelezen berichten" />-->

我知道在讨论同一问题之前有很多问题。我仍然在问这个问题的原因是因为它们都不适合我。 我试过用: PreferenceManager.setDefaultValues(this,R.xml.preferences,false);

但就像我说它没有解决我的问题。要清楚的是,问题是找不到密钥,导致SharedPreferences函数自己返回默认的“错误”值。

是否有可能出现此问题,因为我正在使用targetsdk lvl 8构建此应用程序?哪个是Android 2.2

2 个答案:

答案 0 :(得分:0)

删除

mySharedPreferences = context.getSharedPreferences("KCStandaardSettings", mode);

public static Boolean GetBoolean(Context context, String Name) 
{
    mySharedPreferences = context.getSharedPreferences("KCStandaardSettings", mode);
    return mySharedPreferences.getBoolean(Name, false);
}

在GetBoolean中,您将创建一个名为KCStandaardSettings的首选项文件名。

答案 1 :(得分:0)

我希望这会解决你的问题,我只是将其设置为答案,因为评论时间过长,但尚未检查。要在PreferenceActivity中获取首选项,请执行以下操作:

     public static Boolean GetBoolean(Context context, String Name) 
  {
CheckBoxPreference checkBoxPref = (CheckBoxPreference)findPreference("RemainLoggedIn");
boolean yourBoolean = checkBoxPref.isChecked();
return yourBoolean;
  }

我不确定他的作品是否合适,因为我现在没有IDE可以测试(不在家)。如果没有,请给我一些时间来检查一下。