2016-07-11 3 views
2

SharedPreferences의 List에서 값을 편집하려고하지만 someting이 잘못되었습니다.안드로이드 목록의 SharedPreference

내 SharedPreference은 다음과 같습니다

int step = StepsData.data.getInt(String.valueOf(VALUE_KEY), 0); 
editor.putInt(String.valueOf(VALUE_KEY), 0).apply(); 

하지만 I : 내가 편집하거나 VALUE_KEY의 모든 방식으로 작동에서 값을 얻으려면

StepsData.data = getApplicationContext().getSharedPreferences("userData", MODE_PRIVATE); 
StepsData.editor = StepsData.data.edit(); 

:

public class StepsData { 
    static SharedPreferences data; 
    static SharedPreferences.Editor editor; 
    static final int VALUE_KEY = 0; 
    static final List<String> LIST_KEY= new Vector<String>(); 
} 

내가 의해 SharedPref를 사용 List를 사용하는 데 문제가 있습니다. 값을 얻기위한 코드는 다음과 같습니다.

및 삭제에 대한:

List<String> clearList = new Vector<String>(); 
editor.putStringSet(String.valueOf(LIST_KEY), (Set<String>) clearList).apply(); 

하지만 NullPointerException이있다. SharedPreference의 List에서 ".clear()"와 같은 것을 사용하는 가장 좋은 방법은 무엇이며이 List 및 size에서 값을 가져 오는 방법은 무엇입니까?

+2

코드에 몇 가지 문제가 있습니다. 첫째,'LIST_KEY'는'List'가 아닌'String' 일 필요가 있습니다. 둘째, 공유 환경 설정은'List '이 아니라'Set '을 허용합니다. 그러나 'Set'을 사용하여 List를 인스턴스화 할 수 있으며 그 반대의 경우도 가능합니다. '리스트 stringList = 새로운 ArrayList <> (yourStringSet); stringSet = new TreeSet <> (yourStringList)'을 설정하십시오. 목록에 중복 된 것이 포함되어 있다면 고유 한 것으로 축소 될 수 있습니다. –

답변

4

SharedPreference에 List 개체를 저장하고 gson 라이브러리를 사용하려면이 개체를 사용하십시오. 목록 개체를 json 형식으로 변환하고 해당 json 문자열을 sharedPref에 저장하는 데 사용됩니다. 코드 아래 '2.4 : GSON com.google.code.gson'

을 목록에 유형을 설정하는 것입니다
먼저 Gradle을 파일에이 라인을 (응용 프로그램 레벨)

컴파일을 포함

Type listType = new TypeToken<List<String>>(){}.getType(); 

Gson gson = new Gson(); 

이제 목록 개체를 만들고 GSON 객체를 사용하여 JSON 문자열 형식으로 변환하고 입력

List<String> myList = new ArrayList<>(); 
//add elements in myList object 

String jsonFormat = gson.toJson(myList,listType); 
//adding to sharedPref 
editor.put("list",jsonFormat).apply(); 
,

이제 sharedPref에서 값을 가져 와서 json 문자열을 List 객체로 다시 변환하십시오.

//this line will get the json string from sharedPref and will converted into object of type list(specified in listType object) 
List<String> list = gson.fromJson(sharedPref.get("list",""),listType); 
//now modify the list object as par your requirement and again do the same step of converting that list object into jsonFormat. 
1

에서 다음 : 세계적으로

선언 myList : 설정 값을

ArrayList<String> myList = new ArrayList<String>(); 

: 점점 값

for (int i = 0; i < totalSize; i++) { 
    PreferenceManager.getDefaultSharedPreferences(this) 
        .edit() 
        .putString("number" + i, value + "").commit();   
} 

:

for (int i = 0; i < totalSize; i++) { 
    myList.add(PreferenceManager.getDefaultSharedPreferences(this) 
           .getString("number" + i, "0")); 
} 

참고 : - totalSize은이를 확인 당신이 목록을 사용해야하는 경우 sharedpreference

Set<String> set = preference.getStringSet("key", null); 

//Set the values 
Set<String> set = new HashSet<String>(); 
set.addAll(listOfExistingScores); 
preferenceEditor.putStringSet("key", set); 
preferenceEditor.commit(); 

에서 모든 요소를 ​​점점 배열

+0

요소별로 요소가 아닌 모든 목록을 추가하는 방법은 무엇입니까? –

+0

이 방법을 사용하고있어 저에게 적합합니다 ... – sushildlh

1

왜 사용합니까 목록의 크기 (인 중복 요소를 포함)
입니다 링크 https://gist.github.com/cr5315/6200903

+0

질문이 하나 더 있습니다. 왜 내가 data.getInt (String.valueOf (SOME_INT_KEY), 0); 그냥 data.getInt insted (SOME_INT_KEY, 0); 공유 환경 설정에서 static final int SOME_INT_KEY? 모든 예제에서 두 번째 버전이지만 오류가있어서 String.valueof를 넣어야합니다 – barmi

+1

정수가 아닌 문자열로 저장된 공유 환경 설정 키입니다. https://developer.android.com/training/basics/data-storage를 확인하십시오. /shared-preferences.html#WriteSharedPreference –