2012-06-29 111 views
1

問題是我的內存不足,因此寫入失敗。由於異常掉落在地板上,我無法自信地處理它(請參閱http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/2.3.3_r1/android/app/ContextImpl.java#3169)。 .commit()調用將返回false,我可以使用它來處理寫入錯誤,但我不知道失敗來自空間問題還是來自其他方面。SharedPreferences.commit失敗,出現java.io.IOException:設備上沒有剩餘空間

如何知道提交失敗的內容?

堆棧跟蹤

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) 

回答

-1

您可以發佈您的代碼?這是模擬器上的真實設備嗎? SharedPerferences實際上只是一個xml文件。你可以通過使用adb shell並轉到data/data/your.package.name/sharedpreferences來自己瀏覽它們。

您是否試過在設備上釋放內存?刪除一些舊文件或增加VM大小。另外,它在#IO2012中只是注意到使用apply()而不是commit()。除非你真的想要你的回報價值,大多數人不會。

+0

我不想釋放空間。我想知道爲什麼提交失敗,沒有解決它。由於任何設備的空間不足,該設備並不重要。你讀過關於獲取返回值是否失敗的部分嗎? – browep

+1

因爲空間不足而導致提交失敗java.io.IOException:設備上沒有空間 所以你應該嘗試釋放一些。如果您無法寫入設備,該設備就很重要。 –

+0

commit方法返回false,不拋出異常。上述例外情況來自日誌。閱讀我發佈的來源鏈接。該方法吞下異常並返回false。 – browep

相關問題