2014-09-18 2 views
0

내 설정 활동이 PreferenceActivity까지 확장되며 앱에 머물러있는 한 모든 것이 예상대로 작동합니다. 하지만 Android Studio를 통해 앱을 다시 시작하면 모든 설정이 기본값으로 돌아갑니다.앱 재시작 후 PreferenceActivity의 설정이 저장되지 않음

또한 isPersistent 플래그를 설정하려고했지만 도움이되지 않습니다.

Settings.XML이있는 항목의 예 : 내 서브 클래스에서

 <CheckBoxPreference 
      android:defaultValue="false" 
      android:key="askcode" 
      android:title="@string/askCodeSettingsString" /> 

onCreate 방법 :

SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(this); 
boolean keepdata = pref.getBoolean("askcode", false); 
:

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    addPreferencesFromResource(R.xml.settings); 
    ... 

응용 프로그램을 다시 시작할 때 내가 설정을 가져 오기 위해 시도하는 방법은 그

나는 또한 어떤 사람들은에서 자신의 항목을 변경하여 작동시키고 있음을 읽었습니다.하지만 나에게 좋아 보인다 :

<activity 
     android:name=".SettingsActivity" 
     android:label="@string/app_name" 
     android:theme="@android:style/Theme.Light" > 
    </activity> 

편집하는 것은 내가 수동으로 저장하고있어

다른 기본 설정은 예상대로 작동됩니다

저장 :

SharedPreferences.Editor editor = PreferenceManager.getDefaultSharedPreferences(context).edit(); 
editor.putString(PREFS_MANUAL, "12345"); 
editor.commit(); 

하는 가져 오기 :

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); 
    String myString = prefs.getString(PREFS_MANUAL, ""); 
    return myString; // now 12345 

편집 내가 문제를 발견 한 것 같다 2 * -하지만 원인을하지 무엇을. 모든 기본 설정에 대한 기본값이 있습니다. 문자열은 android:defaultValue=""으로 충분하지 않다고 생각합니다. 어떻게 방지 할 수 있습니까?

09-18 12:13:23.763  925-940/com.... W/SharedPreferencesImpl﹕ getSharedPreferences 
org.xmlpull.v1.XmlPullParserException: Map value without name attribute: string 
     at com.android.internal.util.XmlUtils.readThisMapXml(XmlUtils.java:568) 
     at com.android.internal.util.XmlUtils.readThisValueXml(XmlUtils.java:821) 
     at com.android.internal.util.XmlUtils.readValueXml(XmlUtils.java:755) 
     at com.android.internal.util.XmlUtils.readMapXml(XmlUtils.java:494) 
     at android.app.SharedPreferencesImpl.loadFromDiskLocked(SharedPreferencesImpl.java:113) 
     at android.app.SharedPreferencesImpl.access$000(SharedPreferencesImpl.java:48) 
     at android.app.SharedPreferencesImpl$1.run(SharedPreferencesImpl.java:87) 
+0

이러한 문제가 발생하지 않았습니다. 코드가 제대로 작동해야합니다. 앱을 다시 설치하지 않으셔서 데이터를 지우시겠습니까? –

+0

환경 설정 편집기에 값을 지정 하시겠습니까? –

+0

@DoctororDrive 예, 확실합니다 - 제발 내 편집을 참조하십시오. – swalkner

답변

1

비동기 영구 저장소에 환경 설정을 저장하는 PreferenceManager 전화 apply().

내 생각에 DDMS를 통해 앱을 종료하면 환경 설정이 아직 작성되지 않은 것입니다. 수동으로 저장을 시도하면 commit()이 호출되어 환경 설정이 영구 저장소에 기록 될 때까지 UI 스레드가 차단됩니다.

코드 조각에서 수동으로 저장하려고했는데 commit() 대신 apply()을 호출하면 PreferenceScreen 논리를 사용할 때와 같은 결과를 얻게됩니다.

처음에 PreferencesActivity을 종료 할 것인지 묻는 때 나는 onStop() 또는 onDestroy() 이벤트 등에서 글자를 쓰기 시작했을 것이라고 생각했지만 그다지 관련이 없다는 것이 밝혀졌습니다. 나는 내부 논리가 apply()에 익숙하지 않아 기본 설정을 작성하기 전에 얼마나 많은 시간을 기다려야하는지에 대해 많이 언급하고 있지만 오랜 시간이 걸리지 않아야합니다.

걱정할 사항은 없습니다. 앱은 일반적으로 최종 사용자 기기에서 실행될 때처럼 죽지 않습니다.

즉시 유일한 방법은 바로 저장 할 모든 PreferenceOnPreferenceChangeListener을 설정하고, 설정 변경 이벤트에 호출 Editorcommit()에 값을 쓰고 저장되지 기본 설정에 대한 염려되는 경우.

그런 경우 수동으로 저장 한 모든 환경 설정에 android:persistent="false"을 설정해야 백그라운드에서 자동 저장이 다시 실행되지 않습니다.

관련 문제