0

それぞれ1つの値SharedPreferencesを格納している複数のものがあります。int以前に複数の作成に成功しましたSharedPreferencesが、これには少し異なるアプローチを試みています。私は最高の5つの値だけを保持しています。その から各値を取得してからSharedPreference、5 つの値 + で他の値と比較したい現在の値を追加していArrayListます。その上で逆ソートメソッドを呼び出してから、最後の値を削除しています(余分なので)。次に、各インデックスを のエディターに入れていSharedPreferencesます。ここに私が持っているものがあります:

prefs1 = this.getSharedPreferences("key1", Context.MODE_PRIVATE);
int value1 = prefs1.getInt("number1", 0);

prefs2 = this.getSharedPreferences("key2", Context.MODE_PRIVATE);
int value2 = prefs2.getInt("number2", 0);

prefs3 = this.getSharedPreferences("key3", Context.MODE_PRIVATE);
int value3 = prefs3.getInt("number3", 0);

prefs4 = this.getSharedPreferences("key4", Context.MODE_PRIVATE);
int value4 = prefs4.getInt("number4", 0);

prefs5 = this.getSharedPreferences("key5", Context.MODE_PRIVATE);
int value5 = prefs5.getInt("number5", 0);

ArrayList<Integer> numList = new ArrayList<Integer>();
Collections.addAll(numList, value0, value1, value2, value3, value4, value5);
Collections.sort(numList, Collections.reverseOrder());
numList.remove(numList.size()-1);
value1 = numList.get(0);
value2 = numList.get(1);
value3 = numList.get(2);
value4 = numList.get(3);
value5 = numList.get(4);

Editor editor = prefs1.edit();
editor.putInt("number1", value1);
editor.commit();

editor = prefs2.edit();
editor.putInt("number2", value2);
editor.commit();

editor = prefs3.edit();
editor.putInt("number3", value3);
editor.commit();

editor = prefs4.edit();
editor.putInt("number4", value4);
editor.commit();

editor = prefs5.edit();
editor.putInt("number5", value5);
editor.commit();

私が抱えている問題は、他のアクティビティvalue0が実行された後でも、他のアクティビティの値のそれぞれに 0 が表示されることです。

私がこれをやっている方法に何か問題がありますか? (そうでない場合は、別のアクティビティでこれらの値を取得したときでなければなりませんが、その権利があるとほぼ確信しています。)

編集*

おそらくそれは検索中です。これは検索アクティビティからのものです。

prefs1 = this.getSharedPreferences("key1", Context.MODE_PRIVATE);
num1 = prefs1.getInt("number1", 0); //0 is the default value
tv1 = (TextView) findViewById(R.id.val1);
tv1.setText(String.valueOf(num1));

prefs2 = this.getSharedPreferences("key2", Context.MODE_PRIVATE);
num2 = prefs2.getInt("number2", 0); //0 is the default value
tv2 = (TextView) findViewById(R.id.val2);
tv2.setText(String.valueOf(num2));

prefs3 = this.getSharedPreferences("key3", Context.MODE_PRIVATE);
num3 = prefs3.getInt("number3", 0); //0 is the default value
tv3 = (TextView) findViewById(R.id.val3);
tv3.setText(String.valueOf(num3));

prefs4 = this.getSharedPreferences("key4", Context.MODE_PRIVATE);
num4 = prefs4.getInt("number4", 0); //0 is the default value
tv4 = (TextView) findViewById(R.id.val4);
tv4.setText(String.valueOf(num4));

prefs5 = this.getSharedPreferences("key5", Context.MODE_PRIVATE);
num5 = prefs5.getInt("number5", 0); //0 is the default value
tv5 = (TextView) findViewById(R.id.val5);
tv5.setText(String.valueOf(num5));
4

1 に答える 1

4

SharedPreferences は、すべてのものの巨大なマップのように考えることができますが、変なことをしない限り、同じ巨大なマップ (つまり、同じ SharedPreferences) からデータを保存および取得する必要があります。あなたがしているのは、名前付きの共有設定を作成することです。デフォルトのまま使用することをお勧めします。それが何を意味するのかについてもっと知りたい場合は、この質問をチェックしてください。

したがって、5 つの値を格納している場合、SharedPreferences次のように異なるキーを指定するだけで同じ値を格納できます。

SharedPreferences mSharedPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());  
SharedPreferences.Editor mSharedPreferencesEditor = mSharedPreferences.edit();

mSharedPreferencesEditor.putInt("numberX", numberX);
mSharedPreferencesEditor.putInt("numberY", numberY);
mSharedPreferencesEditor.commit()

mSharedPreferences.getInt("numberX", numberX);
mSharedPreferences.getInt("numberY", numberY);

簡単に異なるキーを使用して、同じ sharedPrefs に入れることができgetますput。コードは次のようになります。

SharedPreferences mSharedPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());  
SharedPreferences.Editor mSharedPreferencesEditor = mSharedPreferences.edit();

int value1 = mSharedPreferences.getInt("number1", 0);
int value2 = mSharedPreferences.getInt("number2", 0);
int value3 = mSharedPreferences.getInt("number3", 0);
int value4 = mSharedPreferences.getInt("number4", 0);
int value5 = mSharedPreferences.getInt("number5", 0);

...

mSharedPreferencesEditor.putInt("number1", value1);
mSharedPreferencesEditor.putInt("number2", value2);
mSharedPreferencesEditor.putInt("number3", value3);
mSharedPreferencesEditor.putInt("number4", value4);
mSharedPreferencesEditor.putInt("number5", value5);
mSharedPreferencesEditor.commit();

すべての値が 0 であるという問題は異なる場合があります。sharedPrefs に 0 以外を保存することはないため、getInt へのすべての呼び出しが 0 になることを完全に期待しています。ゼロを追加してゼロを入れているだけのようです。ここで何をしようとしているのかはわかりませんが、この関数を呼び出す前のある時点で、次のmSharedPreferencesEditor.putInt(number);ように sharedPrefs オブジェクトを呼び出して、 1 ~ 5 の数字を 0 以外に割り当てると役立ちます。

SharedPreferences mSharedPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());  
SharedPreferences.Editor mSharedPreferencesEditor = mSharedPreferences.edit();

//for example, for the key "number5"
mSharedPreferencesEditor.putInt("number5", value5);
于 2013-02-20T02:32:46.603 に答える