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

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

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

true를 반환

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

빈지도를 반환

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



답변

당신이 할 수있는 것은 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()


답변

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

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


답변

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

 sharedPreferences?.all?.forEach {
     //access key using it.key & value using it.value
     Log.d("Preferences values",it.key() + ": " + it.value()
 }


답변