2013-02-20 3 views
0

나는 각각 int 값을 저장하는 SharedPreferences이 여러 개 있습니다. 전에 성공적으로 다중 SharedPreferences을 만들었지 만이 방법에 약간 다른 접근 방식을 시도하고 있습니다. 나는 가장 높은 5 개의 가치만을 지키고있다. SharedPreference에서 각 값을 가져오고 있습니다. 그런 다음 다른 값과 비교할 현재 값인 5 값 + ArrayList을 더하고 있습니다. 역방향 정렬 메서드를 호출하고 나서 마지막 값을 제거합니다 (추가 값이기 때문에). 그런 다음 각 색인을 SharedPreferences의 편집기에 넣습니다.Android : SharedPreferences 문제 (복수 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을 보여주고 있습니다 : 여기에 내가 가진 것입니다.

내가이 작업을 수행하는 데 문제가 있습니까? (나는 다른 활동에서이 값을 얻을,하지만 난 그 권리가 거의 긍정적입니다 때해야 다음 그렇지 않은 경우.)

EDIT *

아마 여기에, 검색에있는 검색 중 활동에서이다 :

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)); 
+1

왜 여러 공유 환경 설정이 필요합니까? 그냥 호기심을 비판하지 마라. –

+0

@ 대니얼 스미스 (DanielSmith) 나는 단지 5 개의 값만 가지고 있으므로, 단지 5 개의 값으로 데이터베이스를 만드는 것보다 이렇게하는 것이 더 쉽습니다. –

+0

또는 하나의 공유 환경 설정을 가지고 5 개의 값을 유지하십시오. – wtsang02

답변

4

당신은 모든 물건에 대한 거대한지도처럼 된 SharedPreferences 생각할 수 있지만, 펑키 아무것도하지 않는 한, 당신은 같은 거대한 맵 (즉, 동일한 된 SharedPreferences)에서 데이터를 저장하고 검색한다. 당신이하고있는 일은 명명 된 공유 환경 설정을 만드는 것입니다. 나는 그냥 기본값을 사용하는 것이 좋습니다 것입니다. 당신이 5 개 값을 저장하는 경우 즉, 귀하의 경우, check out this question.

그래서 무엇을 의미하는지 당신이에 대한 자세한 내용은 호기심이 경우 다음과 같이, 당신은 단지 공급 다른 키가 같은 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); 

getput을 동일한 공유 입력란에 다른 키로 쉽게 설정할 수 있습니다. 귀하의 코드는 다음과 같이됩니다 :

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이되는 모든 값에 관한 문제는 다를 수 있습니다. 나는 이 결코이기 때문에 getInt에 대한 모든 호출이 sharedPrefs에 0을 저장하기 때문에 완전히 기대할 것입니다. 그냥 0을 추가하고 0을 넣는 것 같습니다. 나는 당신이 여기서하려고하는 것이 확실하지 않지만 어떤 점에서이 함수를 호출하기 전에 어느 한 시점에서 sharedPrefs 객체에서 mSharedPreferencesEditor.putInt(number);을 0과 같은 번호로 할당하는 것이 도움이 될 것입니다 :

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

//for example, for the key "number5" 
mSharedPreferencesEditor.putInt("number5", value5); 
+0

value0은 0이 아닙니다. 그래서 항상 0과 같지 않은 값이 하나 이상 있습니다. 테스트 할 때 value0가 양수 (예 :> 0)인지 확인했습니다. –

+0

PreferencesEditor 및 항목을 어떻게 선언합니까? –

+0

위의 코드에 선언을 추가했습니다. 그것을 선언하는 데 도움이됩니까? –