공유 기본 설정의 모든 키를 반복하는 방법은 무엇입니까?


79

SharedPreferences에는 getAll 메소드가 있지만 일부 키가 존재하더라도 항목을 반환하지 않습니다.

PreferenceManager.getDefaultSharedPreferences(this).contains("addNewAddress");

true를 반환

Map<String, ?> keys=PreferenceManager.getDefaultSharedPreferences(this).getAll();

빈지도를 반환

뭐가 잘못 되었 니? 모든 공유 기본 설정 목록을 얻는 방법은 무엇입니까?

답변:


177

당신이 할 수있는 것은 getAll()방법을 사용 SharedPreferences하고 모든 값을 가져 와서 Map<String,?>쉽게 반복 할 수 있습니다.

Map<String,?> keys = prefs.getAll();

for(Map.Entry<String,?> entry : keys.entrySet()){
            Log.d("map values",entry.getKey() + ": " + 
                                   entry.getValue().toString());            
 }

자세한 내용은 구현 을 확인할 수 있습니다 .PrefUtil.java's dump()


3
이 :( 나를 위해 값을 반환하지 않습니다
uniruddh

3
getAll()NULL값 을 반환 할 수 있습니다 . keysNULL 을 확인 하는 것이 좋습니다 .
trante 2014

3
NullPointerException entry.getValue()이 발생 entry.getValue().toString()하지 않는 것보다 사용하는 것이 더 좋습니다 )
Vlad

8

나는 질문이 이유와 더 관련이 있다고 생각합니다

    PreferenceManager.getDefaultSharedPreferences(this).getAll()

표준 Java 맵을 반복하는 방법보다 비어 있거나 모순되는 맵을 반환합니다. 안드로이드 문서는 정말 여기에서 무슨 일이 일어나고 있는지에 대한 명확한 결정이 아니라 기본적으로는 것 같아 지금까지 첫 번째 호출

    PreferenceManager.setDefaultValues(this, R.xml.preferences,false)

-앱을 시작할 때 환경 설정을 초기화하기 위해 호출해야하는 것입니다-나중에 xml 환경 설정 파일에 대한 변경 사항이 일관되지 않게 처리되도록하는 일종의 캐시 된 환경 설정을 생성합니다. 즉, 불일치가 발생합니다. 귀하의 질문에 설명되어 있습니다.

이 "캐시 된 엔티티"를 재설정하려면 다음 단계를 따르십시오 (위 링크에서 생성 할 수 있음).

    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
    prefs.edit().clear();
    PreferenceManager.setDefaultValues(this, R.xml.preferences, true);

내가 필요한 솔루션은이 답변과 stackoverflow.com/a/9310697/1815624
CrandellWS

4

누구나 KOTLIN에서 공유 환경 설정을 반복하려는 경우

 sharedPreferences?.all?.forEach {
     //access key using it.key & value using it.value
     Log.d("Preferences values",it.key() + ": " + it.value()             
 }
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.