1

나는이 다음 코드 :저장 환경이 원인이 유래 오류

sP = PreferenceManager.getDefaultSharedPreferences(this); 

OnSharedPreferenceChangeListener listener = new SharedPreferences.OnSharedPreferenceChangeListener() { 
    @Override 
    public void onSharedPreferenceChanged(SharedPreferences prefs, String key) { 
     if (key.equalsIgnoreCase("checkbox_radio")){ 

      if (sP.getBoolean(key, true)){ 
       Editor editor = sP.edit(); 
       editor.putBoolean(key, false); 
       editor.commit(); 
      } 
      else { 
       Editor editor = sP.edit(); 
       editor.putBoolean(key, true); 
       editor.commit(); 
      } 
     } 
    } 
}; 

sP.registerOnSharedPreferenceChangeListener(listener); 

내가 취소/해당 상자 확인 결과 오류가 점점 오전 : 당신은 내부의 공유 환경 설정을 변경하는

03-10 22:24:50.883: D/dalvikvm(3616): GC_CONCURRENT freed 5171K, 36% free 9629K/14936K, paused 5ms+3ms, total 35ms 
03-10 22:24:51.313: D/dalvikvm(3616): GC_CONCURRENT freed 725K, 36% free 9593K/14936K, paused 5ms+4ms, total 34ms 
03-10 22:24:51.773: D/dalvikvm(3616): GC_CONCURRENT freed 684K, 36% free 9584K/14936K, paused 1ms+2ms, total 22ms 
03-10 22:24:52.203: D/dalvikvm(3616): GC_CONCURRENT freed 653K, 36% free 9619K/14936K, paused 5ms+3ms, total 31ms 
03-10 22:24:52.623: D/dalvikvm(3616): GC_CONCURRENT freed 683K, 36% free 9609K/14936K, paused 3ms+2ms, total 25ms 
03-10 22:24:53.023: D/dalvikvm(3616): GC_CONCURRENT freed 671K, 36% free 9652K/14936K, paused 3ms+4ms, total 33ms 
03-10 22:24:53.083: I/dalvikvm(3616): threadid=1: stack overflow on call to Ljava/lang/Thread;.currentThread:L 
03-10 22:24:53.083: I/dalvikvm(3616): method requires 4+20+0=24 bytes, fp is 0x61f7630c (12 left) 
03-10 22:24:53.083: I/dalvikvm(3616): expanding stack end (0x61f76300 to 0x61f76000) 
03-10 22:24:53.083: I/dalvikvm(3616): Shrank stack (to 0x61f76300, curFrame is 0x61f764a0) 
03-10 22:24:53.083: D/AndroidRuntime(3616): Shutting down VM 
03-10 22:24:53.083: W/dalvikvm(3616): threadid=1: thread exiting with uncaught exception (group=0x40e48930) 
03-10 22:24:53.153: D/dalvikvm(3616): GC_CONCURRENT freed 642K, 35% free 9803K/14936K, paused 3ms+2ms, total 23ms 
03-10 22:24:53.153: D/dalvikvm(3616): WAIT_FOR_CONCURRENT_GC blocked 8ms 
03-10 22:24:53.153: E/AndroidRuntime(3616): FATAL EXCEPTION: main 
03-10 22:24:53.153: E/AndroidRuntime(3616): java.lang.StackOverflowError 
03-10 22:24:53.153: E/AndroidRuntime(3616):  at java.lang.ThreadLocal.get(ThreadLocal.java:53) 
03-10 22:24:53.153: E/AndroidRuntime(3616):  at dalvik.system.BlockGuard.getThreadPolicy(BlockGuard.java:140) 
03-10 22:24:53.153: E/AndroidRuntime(3616):  at libcore.io.BlockGuardOs.open(BlockGuardOs.java:106) 
03-10 22:24:53.153: E/AndroidRuntime(3616):  at libcore.io.IoBridge.open(IoBridge.java:400) 
03-10 22:24:53.153: E/AndroidRuntime(3616):  at java.io.FileOutputStream.<init>(FileOutputStream.java:88) 
03-10 22:24:53.153: E/AndroidRuntime(3616):  at java.io.FileOutputStream.<init>(FileOutputStream.java:73) 
03-10 22:24:53.153: E/AndroidRuntime(3616):  at android.app.SharedPreferencesImpl.createFileOutputStream(SharedPreferencesImpl.java:543) 
03-10 22:24:53.153: E/AndroidRuntime(3616):  at android.app.SharedPreferencesImpl.writeToFile(SharedPreferencesImpl.java:591) 
03-10 22:24:53.153: E/AndroidRuntime(3616):  at android.app.SharedPreferencesImpl.access$800(SharedPreferencesImpl.java:52) 

답변

2

onSharedPreferenceChanged의 경우,이 작업을 수행하지 마십시오. 무한 재귀입니다.

+0

변경 사항을 저장하려면 어떻게해야합니까? – user1830769

+0

'editor.commit();'은 변경 사항을 저장합니다. 변경 후'onSharedPreferenceChanged'가 호출됩니다. – smith324

+0

죄송합니다, 아직 완전히 명확하지 않습니다. 내가 청취자가 필요 없다고 말하는가? editor.commit()을 클릭하면 완료 할 수 있습니까? 나는 어떻게 그리고 어디서이 일을해야하는지에 대해 아직도 확신하지 못하고있다. 나는 checkbox에 대해 잘 작동하지만 checkboxpreference를 위해 무엇을해야할지 모르겠다. – user1830769