Java SharedReferences——新应用的初始值来自哪里?
我一直在研究如何在我创建的应用程序中使用首选项。例如: 我的应用程序的一部分需要倒计时。此倒计时计时器的默认值应为8:00(8分钟或480000毫秒)。但是,我需要用户能够将其更改为他们想要的任何值 在我的研究中,我发现了Android内置的SharedReferences功能,但我有点困惑它是如何工作的 我的想法是,应用程序将查找共享的首选项,如果没有,则使用默认值。它似乎不起作用。一旦我安装了新的应用程序(目前没有共享首选项XML文件,所以我认为它只会加载默认值),但我得到了一个空指针错误,应用程序崩溃 这是我的相关代码:Java SharedReferences——新应用的初始值来自哪里?,java,android,Java,Android,我一直在研究如何在我创建的应用程序中使用首选项。例如: 我的应用程序的一部分需要倒计时。此倒计时计时器的默认值应为8:00(8分钟或480000毫秒)。但是,我需要用户能够将其更改为他们想要的任何值 在我的研究中,我发现了Android内置的SharedReferences功能,但我有点困惑它是如何工作的 我的想法是,应用程序将查找共享的首选项,如果没有,则使用默认值。它似乎不起作用。一旦我安装了新的应用程序(目前没有共享首选项XML文件,所以我认为它只会加载默认值),但我得到了一个空指针错误,
long
msSavedMainClock = 0,
msSavedShotClock = 0,
msShotClockStart,
msMainClockStart;
TextView
tvPeriodPrefix,
tvPeriod;
// Create the SharedPreferences object
SharedPreferences prefs = getSharedPreferences("settings", MODE_PRIVATE);
// Create the Preference Editor object
SharedPreferences.Editor prefsEditor = prefs.edit();
@Override
protected void onCreate(Bundle savedInstanceState) {
/******* more code here *******/
// Load the values/defaults from the SharedPreferences
tvPeriodPrefix.setText( prefs.getString("Period_Prefix", getResources().getString(R.string.period)) );
msMainClockStart = prefs.getLong( "Default_Main_Clock", 480000); // 8 minute default
msShotClockStart = prefs.getLong( "Default_Shot_Clock", 24000); // 24 second default
// Initialize other variables
tvPeriod.setText( tvPeriodPrefix + "1" );
/******* rest of my code here *******/
有人能告诉我我做错了什么吗?getSharedReferences()
需要有效的上下文,因此最早可以运行此代码的是onCreate()
:
我以前可能已经为您回答过这样的问题,所以一个好的经验法则是:只尝试在方法之外设置基本变量。像
int
、long
、甚至String
这样的变量都是安全的。但是要小心任何以大写字母开头的数据类型(String
是一个例外).getSharedReferences()
需要有效的上下文,因此最早可以在onCreate()中运行此代码:
我以前可能已经为您回答过这样的问题,所以一个好的经验法则是:只尝试在方法之外设置基本变量。像int
、long
、甚至String
这样的变量都是安全的。但是要小心任何以大写字母开头的数据类型(String
是一个例外).您在哪里获得NullPointerException?您在哪里获得NullPointerException?谢谢您的帮助!我按照您的建议只在我的方法之外设置基本变量。但看起来这并不是导致错误的原因。似乎这是我添加的另一个变量,但forgot为其赋值。也就是说,我想我以前没有问过类似的问题,您已经回答了。我问了另外一个关于启动新的首选项活动的问题,但我创建了这个新线程,因为我认为添加到上一个问题上没有帮助。谢谢您的帮助!我已经遵循了您的建议estion关于在我的方法之外只设置基本变量的问题。但这看起来并不是导致错误的原因。似乎这是我添加的另一个变量,但忘了给它赋值。也就是说,我认为在你回答之前我没有问过类似的问题。我问过另一个问题r我正在开始一个新的偏好活动,但我创建了这个新的线程,因为我认为这无助于添加到前面的问题中。
// Create the SharedPreferences object
SharedPreferences prefs;
// Create the Preference Editor object
SharedPreferences.Editor prefsEditor;
@Override
protected void onCreate(Bundle savedInstanceState) {
...
prefs = getSharedPreferences("settings", MODE_PRIVATE);
prefsEditor = prefs.edit();