Java Android资产:资产或目标文件夹中的SQLiteDatabase缺少databases/***.zip文件不可写

Java Android资产:资产或目标文件夹中的SQLiteDatabase缺少databases/***.zip文件不可写,java,android,android-asynctask,android-sqlite,Java,Android,Android Asynctask,Android Sqlite,Stackoverflow上有很多打开的线程,除了非打开的线程之外,其他线程都给了我正确的答案来解决这个问题 在各种操作系统2.3.6和4.0.3上都出现了这个错误,所以肯定与Android操作系统版本无关 场景1:市场上提供应用程序版本2.0供用户下载 步骤1-用户下载应用程序,无错误 场景2:应用程序版本2.0在市场上可供用户下载 步骤1-用户已经拥有应用程序1.5的早期版本市场要求用户更新,用户执行更新。Market卸载并安装新版本,应用程序启动时系统崩溃,出现以下错误 I/Databas

Stackoverflow上有很多打开的线程,除了非打开的线程之外,其他线程都给了我正确的答案来解决这个问题

在各种操作系统2.3.6和4.0.3上都出现了这个错误,所以肯定与Android操作系统版本无关

场景1:市场上提供应用程序版本2.0供用户下载

步骤1-用户下载应用程序,无错误

场景2:应用程序版本2.0在市场上可供用户下载

步骤1-用户已经拥有应用程序1.5的早期版本市场要求用户更新,用户执行更新。Market卸载并安装新版本,应用程序启动时系统崩溃,出现以下错误

I/Database(31396): sqlite returned: error code = 14, msg = cannot open file at line 27205 of [42537b6056]

E/Database(31396): sqlite3_open_v2("/data/data/com.XXXXX.XXXXX/databases/XXX", &handle, 2, NULL) failed

W/b       (31396): could not open database XXX - unable to open database file

W/b       (31396): copying database from assets...

W/b       (31396): extracting file: 'XXX'...

E/b       (31396): Couldn't open XXX for writing (will try read-only):

E/b       (31396): com.a.a.a: Missing databases/XXX.zip file in assets or target folder not writable

E/b       (31396):  at org.apache.harmony.luni.platform.OSFileSystem.open(Native Method)

E/b       (31396):  at dalvik.system.BlockGuard$WrappedFileSystem.open(BlockGuard.java:232)

E/b       (31396):  at java.io.FileOutputStream.<init>(FileOutputStream.java:94)

E/b       (31396):  at java.io.FileOutputStream.<init>(FileOutputStream.java:165)

E/b       (31396):  at java.io.FileOutputStream.<init>(FileOutputStream.java:144)

E/b       (31396):  at com.a.a.b.b(Unknown Source)

E/b       (31396):  at com.a.a.b.a(Unknown Source)

E/b       (31396):  at com.a.a.b.getWritableDatabase(Unknown Source)

E/b       (31396):  at com.a.a.b.getReadableDatabase(Unknown Source)

E/b       (31396):  at com.XXXXX.XXXXX.x.a(Unknown Source)

E/b       (31396):  at com.XXXXX.XXXXX.ay.a(Unknown Source)

E/b       (31396):  at com.XXXXX.XXXXX.ay.doInBackground(Unknown Source)

E/b       (31396):  at android.os.AsyncTask$2.call(AsyncTask.java:185)

E/b       (31396):  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306)

E/b       (31396):  at java.util.concurrent.FutureTask.run(FutureTask.java:138)

E/b       (31396):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)

E/b       (31396):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)

E/b       (31396):  at java.lang.Thread.run(Thread.java:1019)

I/Database(31396): sqlite returned: error code = 14, msg = cannot open file at line 27205 of [42537b6056]

E/Database(31396): sqlite3_open_v2("/data/data/com.XXXXX.XXXXX/databases/XXX", &handle, 1, NULL) failed

W/System.err(31396): android.database.sqlite.SQLiteException: unable to open database file

W/System.err(31396):    at android.database.sqlite.SQLiteDatabase.dbopen(Native Method)

W/System.err(31396):    at android.database.sqlite.SQLiteDatabase.<init>(SQLiteDatabase.java:1857)

W/System.err(31396):    at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:824)

W/System.err(31396):    at com.a.a.b.getReadableDatabase(Unknown Source)

W/System.err(31396):    at com.XXXXX.XXXXX.x.a(Unknown Source)

W/System.err(31396):    at com.XXXXX.XXXXX.ay.a(Unknown Source)

W/System.err(31396):    at com.XXXXX.XXXXX.ay.doInBackground(Unknown Source)

W/System.err(31396):    at android.os.AsyncTask$2.call(AsyncTask.java:185)

W/System.err(31396):    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306)

W/System.err(31396):    at java.util.concurrent.FutureTask.run(FutureTask.java:138)

W/System.err(31396):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)

W/System.err(31396):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)

W/System.err(31396):    at java.lang.Thread.run(Thread.java:1019)
场景3:应用程序版本2.0在市场上可供用户下载

第1步-用户已经拥有应用程序1.5的早期版本,自己卸载应用程序,然后手动进入市场并安装应用程序。无误


我不明白为什么在场景2中抛出异常。与安装和卸载相比,升级的工作方式是否有所不同,以及为什么它说目标文件夹不可写

我们进一步分析并得出结论,这是因为一名开发人员更新了清单文件中的sharedUserId。。吸取的教训-


不要为已发布的应用程序更新sharedUserId。

新数据库文件名是否不同?您确定您的代码正在关闭所有I/O处理变量吗?按顺序。。。1.检查数据库。。关闭IO 2。对不用担心。否-从资产复制关闭IO 4。重复1@NikhilPingle-是的,它们已关闭,如果是这种情况,则在场景1和3中也应失败。。我们进一步分析后得出结论,这是因为一位开发人员更新了清单文件中的sharedUserId。。吸取的教训不要为已发布的应用程序更新sharedUserId。。