2

問題は、内部メモリのディスク領域が不足しているため、書き込みが失敗することです。例外がフロアにドロップされるため、自信を持って処理できません(http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/2.3.3_r1/androidを参照) /app/ContextImpl.java#3169)。.commit()呼び出しはfalseを返し、それを使用して書き込みエラーを処理できますが、失敗がスペースの問題によるものなのか、それとも他の何かによるものなのかわかりません。

コミットが何で失敗したかをどうやって知ることができますか?

スタックトレース

06-29 20:01:17.507: WARN/ApplicationContext(19221): writeToFile: Got exception:
        java.io.IOException: No space left on device
        at org.apache.harmony.luni.platform.OSFileSystem.write(Native Method)
        at dalvik.system.BlockGuard$WrappedFileSystem.write(BlockGuard.java:171)
        at java.io.FileOutputStream.write(FileOutputStream.java:300)
        at com.android.internal.util.FastXmlSerializer.flushBytes(FastXmlSerializer.java:212)
        at com.android.internal.util.FastXmlSerializer.flush(FastXmlSerializer.java:233)
        at com.android.internal.util.FastXmlSerializer.endDocument(FastXmlSerializer.java:183)
        at com.android.internal.util.XmlUtils.writeMapXml(XmlUtils.java:185)
        at android.app.ContextImpl$SharedPreferencesImpl.writeToFile(ContextImpl.java:3191)
        at android.app.ContextImpl$SharedPreferencesImpl.access$800(ContextImpl.java:2756)
        at android.app.ContextImpl$SharedPreferencesImpl$1.run(ContextImpl.java:3106)
        at android.app.ContextImpl$SharedPreferencesImpl.enqueueDiskWrite(ContextImpl.java:3127)
        at android.app.ContextImpl$SharedPreferencesImpl.access$100(ContextImpl.java:2756)
        at android.app.ContextImpl$SharedPreferencesImpl$EditorImpl.commit(ContextImpl.java:3049)
4

2 に答える 2

0

ファイルを書き込む前に使用可能な空き領域を確認し、ファイルを収めるのに十分な領域があるかどうかを計算するのはどうですか?ここでメモリをチェックする方法を見ることができます内部および外部メモリをチェックしてください

于 2012-07-10T16:04:10.680 に答える
-1

あなたのコードを投稿できますか?また、これはエミュレータ上の実際のデバイスですか? SharedPerferences は文字通り単なる xml ファイルです。adb shelldata/data/your.package.name/sharedpreferences を使用してアクセスすることで、自分で参照できます。

デバイスのメモリを解放しようとしましたか? 一部の古いファイルを削除するか、VM サイズを増やします。また、 #IO2012 で commit() の代わりに apply() を使用することが指摘されました。ほとんどの人が望んでいない戻り値が本当に必要な場合を除きます。

于 2012-06-29T21:07:44.040 に答える