Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/184.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SharedReferences——新应用的初始值来自哪里?_Java_Android - Fatal编程技术网

Java SharedReferences——新应用的初始值来自哪里?

Java SharedReferences——新应用的初始值来自哪里?,java,android,Java,Android,我一直在研究如何在我创建的应用程序中使用首选项。例如: 我的应用程序的一部分需要倒计时。此倒计时计时器的默认值应为8:00(8分钟或480000毫秒)。但是,我需要用户能够将其更改为他们想要的任何值 在我的研究中,我发现了Android内置的SharedReferences功能,但我有点困惑它是如何工作的 我的想法是,应用程序将查找共享的首选项,如果没有,则使用默认值。它似乎不起作用。一旦我安装了新的应用程序(目前没有共享首选项XML文件,所以我认为它只会加载默认值),但我得到了一个空指针错误,

我一直在研究如何在我创建的应用程序中使用首选项。例如:

我的应用程序的一部分需要倒计时。此倒计时计时器的默认值应为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();