在Android中从xml文件检索首选项

在Android中从xml文件检索首选项,android,xml,settings,Android,Xml,Settings,我是Android新手,我正在尝试按照中的说明处理设置 我使用基于片段的解决方案,因为直接在活动中使用的解决方案已被弃用: public class SettingFragment extends PreferenceFragment { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Load the p

我是Android新手,我正在尝试按照中的说明处理设置

我使用基于片段的解决方案,因为直接在活动中使用的解决方案已被弃用:

public class SettingFragment extends PreferenceFragment {
@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

       // Load the preferences from an XML resource
       addPreferencesFromResource(R.xml.preferences);
    }
}
public class SettingsActivity extends PreferenceActivity {
@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

    // Display the fragment as the main content.
        getFragmentManager().beginTransaction()
            .replace(android.R.id.content, new SettingFragment())
            .commit();
    }
}
设置在应用程序中正确显示,但当我尝试使用以下工具检索其值时:

sharedPref= PreferenceManager.getDefaultSharedPreferences(Dashboard.dashboard);
startDayTime=sharedPref.getString(SettingsActivity.day_switch_start, "");
startNightTime=sharedPref.getString(SettingsActivity.night_switch_start, "");
它抱怨日间开关启动和夜间开关启动的值可能无法解决。事实上,当我分解SettingActivity识别的值时,我会得到一长串标准设置中的大写字符串,但不是我自己的字符串。 事实上,它们只是输入到xml文件中并从SettingFragment链接而来,所以我怀疑我传递的context Dashboard.Dashboard是否有任何引用。然而,没有关于如何将设置引用传递到特定上下文的说明,而且他们说设置应该可以从任何地方获得。我卡住了,有什么办法吗


谢谢,

请再次检查您链接的参考资料,尤其是该部分。当您将首选项键设置为,例如,
day\u switch\u start
时,您必须在读取首选项时使用相同的字符串,例如

startDayTime=sharedPref.getString("day_switch_start", "");
您还可以将首选项存储为常量,如链接示例中所示:

public class SettingsActivity extends PreferenceActivity {
    public static final String KEY_PREF_DAY_SWITCH_START = "day_switch_start";
    // ...
然后在阅读首选项时访问它:

startDayTime=sharedPref.getString(SettingsActivity.KEY_PREF_DAY_SWITCH_START, "");
编辑:我不确定仪表板应该代表什么。仪表板应该代表什么,但这应该可以:

sharedPref= PreferenceManager.getDefaultSharedPreferences(this);

是的,谢谢。我尝试了你的第一个解决方案,它成功了。但它在sharedPref=PreferenceManager.getDefaultSharedPreferences(Dashboard.Dashboard)处发生java.lang.NullPointerException崩溃;当然谷歌在处理指令时很有创意……请查看我的编辑。为什么要使用仪表板。仪表板?你在参考资料中找到了吗?是的,事实上我移动电话太早了,活动还没有创建。事实上,只要把它移到正确的地方,它就会起作用。事实上,我的问题还在于我的手机处于充电状态,而模拟器在创建服务时意外崩溃,因此我不得不对呼叫进行评论,以测试这一点。出于您的好意,您是否得到一些关于模拟器无法启动服务的提示?或者我该如何知道更多。抱歉,但我来自iOS世界,苹果用不同的方式讲述事情,甚至崩溃也更有意义。请问一个关于崩溃的新问题,并在那里包括相关的logcat输出。