2013-07-05 115 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