通常情况下,我正在使用我的应用程序,下载超过30000没有问题。但我看到这个错误开始出现在 android开发者控制台(Crash& ANRS)。
按应用版本 3.1.1 1 100.0%
Android版Android 2.3.3 - 2.3.7 1 100.0%
通过设备刀片(刀片)
这是我的代码:
public void deletetable(String Tablename){
SQLiteDatabase db = mContext.openOrCreateDatabase(DB_NAME,
Context.MODE_PRIVATE, null);
db.delete(Tablename, null, null);
db.execSQL("VACUUM");
}
这是报告:
java.lang.RuntimeException: An error occured while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:200)
at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:274)
at java.util.concurrent.FutureTask.setException(FutureTask.java:125)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:308)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)
at java.lang.Thread.run(Thread.java:1019)
Caused by: android.database.sqlite.SQLiteDiskIOException: disk I/O error: VACUUM
at android.database.sqlite.SQLiteDatabase.native_execSQL(Native Method)
at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1763)
at com.restroomgames.kpss.TestAdapter.deletetable(TestAdapter.java:194)
at com.restroomgames.kpss.TrGenelSinavAnasayfa.yenile(TrGenelSinavAnasayfa.java:395)
at com.restroomgames.kpss.TrGenelSinavAnasayfa$refreshyazi.doInBackground(TrGenelSinavAnasayfa.java:381)
at com.restroomgames.kpss.TrGenelSinavAnasayfa$refreshyazi.doInBackground(TrGenelSinavAnasayfa.java:1)
at android.os.AsyncTask$2.call(AsyncTask.java:185)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306)
... 4 more
答案 0 :(得分:1)
该报告可能意味着在特定用户的设备上写入数据库(I / O错误)存在问题。
在VACCUM文档中,它提到如果正在进行其他SQL事务,VACCUM将无法工作,因此这可能是最初的原因。
这里可以做的不多,除了围绕使用try / catch语句的事务我想。
另一方面,VACCUM没有采取任何论据,至少在旧版本中是这样。较新的sqlite3版本在尝试运行VACCUM时抱怨语法错误。
可以在此处找到VACCUM文档:http://sqlite.org/lang_vacuum.html
"如果存在打开的事务,或者在运行时有一个或多个活动的SQL语句,VACUUM将失败。"
答案 1 :(得分:1)
来自VACUUM文档:
VACUUM命令的工作原理是将数据库的内容复制到 一个临时数据库文件,然后用。覆盖原始文件 临时文件的内容。当覆盖原件时,a 回滚日志或预写日志WAL文件就像使用一样 用于任何其他数据库事务。 这意味着当VACUUMing时 一个数据库,大小是原始数据库文件的两倍 在可用磁盘空间中需要。
可能是磁盘上没有足够的可用空间来执行VACUUM操作。
http://sqlite.org/lang_vacuum.html