2013-01-09 3 views
1

Après des mois de développement, je me rends compte que mon application (seulement en utilisant Android 2.1) se bloque lorsque je fais pivoter l'écran. Je ne sais pas comment enquêter sur cette erreur. Quelle devrait être la cause? Merci pour les conseils. Cet "avertissement" peut-il causer une erreur? CV inattendu de com.example.app alors qu'il était déjà repris en com.example.appandroid 2.1 rotate cause crash

SharedPreferences prefs3 = PreferenceManager.getDefaultSharedPreferences(this); 
     listener = new SharedPreferences.OnSharedPreferenceChangeListener() { 
      public void onSharedPreferenceChanged(SharedPreferences prefs, String listpref) {  
       preferenze(); 





E/AndroidRuntime(1269): java.lang.StackOverflowError 
E/AndroidRuntime(1269): at java.util.HashMap.doubleCapacity(HashMap.java:561) 
E/AndroidRuntime(1269): at java.util.HashMap.put(HashMap.java:391) 
E/AndroidRuntime(1269): at java.util.HashSet.add(HashSet.java:95) 
E/AndroidRuntime(1269): at java.nio.charset.Charset.<init>(Charset.java:189) 
E/AndroidRuntime(1269): at com.ibm.icu4jni.charset.CharsetICU.<init>(CharsetICU.java:33) 
E/AndroidRuntime(1269): at com.ibm.icu4jni.charset.CharsetProviderICU.getCharset(CharsetProviderICU.java:62) 
E/AndroidRuntime(1269): at com.ibm.icu4jni.charset.CharsetProviderICU.charsetForName(CharsetProviderICU.java:57) 
E/AndroidRuntime(1269): at java.nio.charset.Charset.forNameInternal(Charset.java:500) 
E/AndroidRuntime(1269): at java.nio.charset.Charset.forName(Charset.java:570) 
E/AndroidRuntime(1269): at com.android.internal.util.FastXmlSerializer.setOutput(FastXmlSerializer.java:292) 
E/AndroidRuntime(1269): at com.android.internal.util.XmlUtils.writeMapXml(XmlUtils.java:180) 
E/AndroidRuntime(1269): at android.app.ApplicationContext$SharedPreferencesImpl.writeFileLocked(ApplicationContext.java:2757) 
E/AndroidRuntime(1269): at android.app.ApplicationContext$SharedPreferencesImpl.access$800(ApplicationContext.java:2510) 
E/AndroidRuntime(1269): at android.app.ApplicationContext$SharedPreferencesImpl$EditorImpl.commit(ApplicationContext.java:2695) 
E/AndroidRuntime(1269): at com.example.app.MainActivity.preferenze(MainActivity.java:3656) 
E/AndroidRuntime(1269): at com.example.app.MainActivity.access$0(MainActivity.java:3632) 
E/AndroidRuntime(1269): at com.example.app.MainActivity$1.onSharedPreferenceChanged(MainActivity.java:2421) 
E/AndroidRuntime(1269): at android.app.ApplicationContext$SharedPreferencesImpl$EditorImpl.commit(ApplicationContext.java:2703) 
E/AndroidRuntime(1269): at com.example.app.MainActivity.preferenze(MainActivity.java:3732) 
E/AndroidRuntime(1269): at com.example.app.MainActivity.access$0(MainActivity.java:3632) 
E/AndroidRuntime(1269): at com.example.app.MainActivity$1.onSharedPreferenceChanged(MainActivity.java:2421) 
E/AndroidRuntime(1269): at android.app.ApplicationContext$SharedPreferencesImpl$EditorImpl.commit(ApplicationContext.java:2703) 
E/AndroidRuntime(1269): at com.example.app.MainActivity.preferenze(MainActivity.java:3732) 
E/AndroidRuntime(1269): at com.example.app.MainActivity.access$0(MainActivity.java:3632) 
E/AndroidRuntime(1269): at com.example.app.MainActivity$1.onSharedPreferenceChanged(MainActivity.java:2421) 
E/AndroidRuntime(1269): at android.app.ApplicationContext$SharedPreferencesImpl$EditorImpl.commit(ApplicationContext.java:2703) 
E/AndroidRuntime(1269): at com.example.app.MainActivity.preferenze(MainActivity.java:3732) 
E/AndroidRuntime(1269): at com.example.app.MainActivity.access$0(MainActivity.java:3632) 
E/AndroidRuntime(1269): at com.example.app.MainActivity$1.onSharedPreferenceChanged(MainActivity.java:2421) 
E/AndroidRuntime(1269): at android.app.ApplicationContext$SharedPreferencesImpl$EditorImpl.commit(ApplicationContext.java:2703) 
E/AndroidRuntime(1269): at com.example.app.MainActivity.preferenze(MainActivity.java:3732) 
E/AndroidRuntime(1269): at com.example.app.MainActivity.access$0(MainActivity.java:3632) 
E/AndroidRuntime(1269): at com.example.app.MainActivity$1.onSharedPreferenceChanged(MainActivity.java:2421) 
E/AndroidRuntime(1269): at android.app.ApplicationContext$SharedPreferencesImpl$EditorImpl.commit(ApplicationContext.java:2703) 
E/AndroidRuntime(1269): at com.example.app.MainActivity.preferenze(MainActivity.java:3732) 
E/AndroidRuntime(1269): at com.example.app.MainActivity.access$0(MainActivity.java:3632) 
E/AndroidRuntime(1269): at com.example.app.MainActivity$1.onSharedPreferenceChanged(MainActivity.java:2421) 
E/AndroidRuntime(1269): at android.app.ApplicationContext$SharedPreferencesImpl$EditorImpl.commit(ApplicationContext.java:2703) 
E/AndroidRuntime(1269): at com.example.app.MainActivity.preferenze(MainActivity.java:3732) 
E/AndroidRuntime(1269): at com.example.app.MainActivity.access$0(MainActivity.java:3632) 
E/AndroidRuntime(1269): at com.example.app.MainActivity$1.onSharedPreferenceChanged(MainActivity.java:2421) 
E/AndroidRuntime(1269): at android.app.ApplicationContext$SharedPreferencesImpl$EditorImpl.commit(ApplicationContext.java:2703) 
E/AndroidRuntime(1269): at com.example.app.MainActivity.preferenze(MainActivity.java:3732) 
E/AndroidRuntime(1269): at com.example.app.MainActivity.access$0(MainActivity.java:3632) 
E/AndroidRuntime(1269): at com.example.app.MainActivity$1.onSharedPreferenceChanged(MainActivity.java:2421) 
E/AndroidRuntime(1269): at android.app.ApplicationContext$SharedPreferencesImpl$EditorImpl.commit(ApplicationContext.java:2703) 
E/AndroidRuntime(1269): at com.example.app.MainActivity.preferenze(MainActivity.java:3732) 
E/AndroidRuntime(1269): a 
+0

Veuillez fournir du code pour les lignes mentionnées dans 'MainActivity'. – Stan

+0

3000 lignes de code. Dites-moi quelle partie de cela. merci –

+1

Est-ce que com.example.app est le nom de votre application? Si c'est le cas, il semble que vous fassiez quelque chose dans onSharedPreferenceChanged qui provoque une boucle infinie, qui finit par consommer suffisamment de mémoire pour provoquer un débordement de pile. Peut-être avez-vous une ligne à l'intérieur de onSharedPreferenceChanged qui fait que onSharedPreferenceChanged sera appelé de nouveau indirectement? – Andy

Répondre

4

Le problème est dans votre routine preferenze dans votre MainActivity.java.

Aurait besoin de voir plus de code pour être sûr, mais il semble que vous ayez une récursion infinie causée en modifiant votre Preferences dans un rappel onSharedPreferenceChanged. Si vous modifiez vos préférences dans le rappel, le rappel est invoqué à nouveau, puis vous modifiez à nouveau, le rappel est appelé à nouveau, etc.

+0

J'ai un auditeur qui vérifie les préférences et le lit. –

+0

Je ne suis pas sûr est infinie récursive. L'auditeur vérifie seulement quand j'ouvre "setting" sur mon application. –

+0

lecture est bien, l'écriture est le problème. Difficile de mettre le doigt exactement sur le problème sans voir le code, mais à la ligne 3732 vous faites écrire les préférences (via 'commit') et cela provoque l'appel de l'écouteur à nouveau. – iagreen