2011-02-24 6 views
0

나는 내 자신을 문제가있다. 기본 값을 가진 일부 기본 설정을 추적하고 런타임에 사용자가 설정할 수있는 PreferenceManager가 있습니다. 다른 날 나는 이것을 테스트하고 분명히 내가 설정 한 방법으로 처리되지 않는 값을 입력합니다. 내 응용 프로그램이 다시 실행될 수 있도록 xml 파일에 설정된 기본값을로드하려고합니다. 지금, 그것은PreferenceManager 문제

dR.sethRVMax(Integer.parseInt(prefs.getString("hRVMaxKey", "100"))); 

아래의 값을로드하는 부분에 도달 한 후이 오류

02-23 20:35:31.454: ERROR/AndroidRuntime(276): FATAL EXCEPTION: main 
02-23 20:35:31.454: ERROR/AndroidRuntime(276): java.lang.RuntimeException: Unable to start activity ComponentInfo{cpe495.smartapp/cpe495.smartapp.SmartApp}: java.lang.NumberFormatException: unable to parse '7p-' as integer 
02-23 20:35:31.454: ERROR/AndroidRuntime(276):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663) 
02-23 20:35:31.454: ERROR/AndroidRuntime(276):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) 
02-23 20:35:31.454: ERROR/AndroidRuntime(276):  at android.app.ActivityThread.access$2300(ActivityThread.java:125) 
02-23 20:35:31.454: ERROR/AndroidRuntime(276):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) 
02-23 20:35:31.454: ERROR/AndroidRuntime(276):  at android.os.Handler.dispatchMessage(Handler.java:99) 
02-23 20:35:31.454: ERROR/AndroidRuntime(276):  at android.os.Looper.loop(Looper.java:123) 
02-23 20:35:31.454: ERROR/AndroidRuntime(276):  at android.app.ActivityThread.main(ActivityThread.java:4627) 
02-23 20:35:31.454: ERROR/AndroidRuntime(276):  at java.lang.reflect.Method.invokeNative(Native Method) 
02-23 20:35:31.454: ERROR/AndroidRuntime(276):  at java.lang.reflect.Method.invoke(Method.java:521) 
02-23 20:35:31.454: ERROR/AndroidRuntime(276):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
02-23 20:35:31.454: ERROR/AndroidRuntime(276):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
02-23 20:35:31.454: ERROR/AndroidRuntime(276):  at dalvik.system.NativeStart.main(Native Method) 
02-23 20:35:31.454: ERROR/AndroidRuntime(276): Caused by: java.lang.NumberFormatException: unable to parse '7p-' as integer 
02-23 20:35:31.454: ERROR/AndroidRuntime(276):  at java.lang.Integer.parse(Integer.java:433) 
02-23 20:35:31.454: ERROR/AndroidRuntime(276):  at java.lang.Integer.parseInt(Integer.java:422) 
02-23 20:35:31.454: ERROR/AndroidRuntime(276):  at java.lang.Integer.parseInt(Integer.java:382) 
02-23 20:35:31.454: ERROR/AndroidRuntime(276):  at cpe495.smartapp.SmartApp.onCreate(SmartApp.java:90) 
02-23 20:35:31.454: ERROR/AndroidRuntime(276):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
02-23 20:35:31.454: ERROR/AndroidRuntime(276):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) 
02-23 20:35:31.454: ERROR/AndroidRuntime(276):  ... 11 more 
을 뱉어 내가 대신 XML에서 전체 기본값을로드하려는

마지막으로 저장된 환경 설정을로드하려고합니다. 다음을 시도했지만 작동하지 않습니다.

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); 
PreferenceManager.setDefaultValues(this, R.xml.settings, true); 
prefs.registerOnSharedPreferenceChangeListener(this); 

자세한 정보가 필요하면 알려주십시오.

미리 감사드립니다.

답변

2

다시 기본값으로 설정을 재설정하려면하지 왜 또는

은, 먼저 그들을 취소해야합니다 추가 정보를 위해

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

docs for PreferenceManager을 확인하십시오.

참고 : setDefaultVaulesreadAgain 매개 변수를 설명 할 때 그들도이 사건을 토론이 다시 기본값으로 설정을 재설정하지 않습니다. 이 기능을 사용하려면 getDefaultSharedPreferences (Context)를 사용하고이 매개 변수를 true로 설정하여이 메소드를 호출 한 다음이 값을 지운다.

0

preferences.xml 파일에서 각 환경 설정에 대해 defaultValue = "whatever"를 설정하십시오. 당신은 int를 기대한다면

그런 다음 활동에, 10 위의 값이 설정되지 않은 경우 예상 기본값을하는

prefs.getInt(getString(R.string.some_id, 10) 

을한다. XML에 defaultValue를 설정 했으므로 위의 행에서 다시 10을 얻지 못할 것입니다.

try { 
    dR.sethRVMax(Integer.parseInt(prefs.getString("hRVMaxKey", "100"))); 
} catch (NumberFormatException e) { 
    // set to some default value instead 
    dR.sethRVMax(100); 
}