Android SharedReferences.commit失败,java.io.IOException:设备上没有剩余空间

Android SharedReferences.commit失败,java.io.IOException:设备上没有剩余空间,android,sharedpreferences,Android,Sharedpreferences,问题是我的内存空间不足,所以写操作失败。当异常掉到地板上时,我很难自信地处理它(请参阅)。.commit()调用将返回false,我可以用它来处理写入错误,但我不知道失败是因为空间问题还是其他原因 我如何知道提交失败的原因 堆栈跟踪 06-29 20:01:17.507: WARN/ApplicationContext(19221): writeToFile: Got exception: java.io.IOException: No space left on device

问题是我的内存空间不足,所以写操作失败。当异常掉到地板上时,我很难自信地处理它(请参阅)。.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)

你能发布你的代码吗?这也是模拟器上的真实设备吗? SharedPerferences实际上只是一个xml文件。您可以通过使用adb shell并转到data/data/your.package.name/SharedReferences来自己浏览它们


您是否尝试释放设备上的内存?删除一些旧文件或增大VM大小。此外,刚刚在#IO2012中提到使用apply()而不是commit()。除非你真的想要你的返回值,而大多数人不想要。你能发布你的代码吗?这也是模拟器上的真实设备吗? SharedPerferences实际上只是一个xml文件。您可以通过使用adb shell并转到data/data/your.package.name/SharedReferences来自己浏览它们


您是否尝试释放设备上的内存?删除一些旧文件或增大VM大小。此外,刚刚在#IO2012中提到使用apply()而不是commit()。除非你真的想要返回值,而大多数人都不想要。

在写文件之前检查可用的可用空间,然后计算是否有足够的空间来容纳你的文件,怎么样?您可以在此处查看如何检查内存

在写入文件之前检查可用的可用空间,并计算是否有足够的空间容纳文件,如何?您可以在此处查看如何检查内存

我不想释放空间。我想知道为什么提交失败,而不是修复它。设备不重要,因为任何设备都可能耗尽空间。您是否阅读了有关获取返回值以查看其是否失败的部分?提交失败是因为您的空间不足man java.io.IOException:设备上没有剩余空间,因此您应该尝试释放一些空间。如果您无法写入该设备,则该设备并不重要。commit方法返回false,不会引发异常。上述例外情况来自日志。阅读我发布的源链接。该方法接受异常并返回false。我不想再花时间来帮助你了,因为很明显,我的建议被否决了。我不是想腾出空间。我想知道为什么提交失败,而不是修复它。设备不重要,因为任何设备都可能耗尽空间。您是否阅读了有关获取返回值以查看其是否失败的部分?提交失败是因为您的空间不足man java.io.IOException:设备上没有剩余空间,因此您应该尝试释放一些空间。如果您无法写入该设备,则该设备并不重要。commit方法返回false,不会引发异常。上述例外情况来自日志。阅读我发布的源链接。该方法接受异常并返回false。我不想再花时间来帮助你了,因为很明显我的建议被否决了。