1

数か月の開発の後、画面を回転させるとアプリ (android 2.1 のみを使用) がクラッシュすることに気付きました。このエラーについて調査する方法がわかりません。原因は何ですか?アドバイスをありがとう。この「警告」によってエラーが発生する可能性はありますか? com.example.app で既に再開されているにもかかわらず、com.example.app が予期せず再開される

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
4

1 に答える 1

4

問題はpreferenzeMainActivity.java のルーチンにあります。

確かにもう少しコードを見る必要がありますが、コールバックPreferences内を変更することによって無限再帰が発生しているようです。onSharedPreferenceChangedコールバックで設定を編集すると、コールバックが再度呼び出され、次に再度編集すると、コールバックが再度呼び出されます。

于 2013-01-09T17:40:18.503 に答える