2013-07-05 44 views
0

加載Sharedpreferences我想創建一個PreferenceActivity並使用XML文件來加載可由用戶配置的偏好。但不知何故「默認值」沒有正確加載。這是我的preferenceActivity代碼:無法從XML

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本身(文件名是喜好。 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(這一點,R.xml.preferences,FALSE);

但就像我說的它並沒有解決我的問題。清楚的是,問題在於未找到導致由SharedPreferences函數返回的默認「錯誤」值的密鑰。

是否有機會出現,因爲事實上,我建立這個應用程式targetsdk LVL 8這個問題?這是Android 2.2的

+0

這只是一個假設,但您引用了兩個不同的sharedPreferences。首先您使用PreferenceManager獲取默認值,然後您嘗試使用您的密鑰「KCStandaardSettings」獲取它們。只使用一個.... – Opiatefuchs

+0

謝謝,但你有任何想法如何實現,在我的preferences.xml? – user

回答

0

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

刪除

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

在GetBoolean要創建一個使用名稱KCStandaardSettings偏好文件名。

+0

所以你說,我要刪除所有 mySharedPreferences = context.getSharedPreferences(「KCStandaardSettings」模式); 在全班? – user

+0

您或者刪除了'mySharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);'或'mySharedPreferences = context.getSharedPreferences(「KCStandaardSettings」,mode);' – Tarun

+0

我嘗試刪除mySharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);但那並不奏效。當刪除mySharedPreferences = context.getSharedPreferences(「KCStandaardSettings」,模式);該應用程序只是崩潰。 – user

0

我希望這將解決你的問題,我只是它設置爲答案,因爲它是一個註釋太長,但這尚未檢查。爲了讓您的PreferenceActivity內的喜好,做這樣的事情:

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

我真的不知道,如果有關他的作品,因爲我沒有IDE現在測試(不在家)。如果沒有,給我一些時間來檢查這一點。

+0

不,它不起作用。我無法對非靜態字段進行靜態引用。並刪除靜態部分,正在刪除我的方法訪問.. – user