0

作成したアプリで設定を使用することを検討しています。例えば:

私のアプリの一部には、CountDown タイマーが必要です。このカウント ダウン タイマーのデフォルトは 8:00 (8 分または 480000 ミリ秒) です。ただし、ユーザーがこれを任意の値に変更できるようにする必要があります。

調査中に、Android に組み込まれている SharedPreferences 機能を発見しましたが、それがどのように機能するのか少し混乱しています。

私の考えでは、アプリは共有設定を探し、そこにない場合はデフォルトを使用します。機能していないようです。新しいアプリをインストールすると (現在、共有設定 XML ファイルがないため、デフォルトをロードするだけだと思っていましたが、null ポインター エラーが発生し、アプリがクラッシュします。

これが私の関連コードです:

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 *******/

誰が私が間違っているのか教えてもらえますか?

4

1 に答える 1

3

getSharedPreferences()有効なコンテキストが必要なため、このコードを実行できる最も早い時期は次のonCreate()とおりです。

// 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();

以前にこのような質問に答えたことがあるかもしれませんが、経験則としては、メソッドの外でプリミティブ変数のみを設定するようにしてください。intlong、またはなどの変数Stringは安全です。ただし、大文字で始まるデータ型には注意してください ((Stringは 1 つの例外です))。

于 2012-12-30T23:43:32.657 に答える