Android 我得到了这个错误:在安卓2.2上,数据超过了解压数据最大值,但在2.3上没有

Android 我得到了这个错误:在安卓2.2上,数据超过了解压数据最大值,但在2.3上没有,android,Android,我只在安卓2.2版上收到一个错误,但在2.3版上没有 错误: 04-26 13:41:34.862: ERROR/Database(3701): sqlite3_open_v2("/data/data/com.TravelPharm/databases/medicaments.sqlite", &handle, 1, NULL) failed 04-26 13:41:34.942: DEBUG/dalvikvm(417): GC_EXPLICIT freed 82 objects

我只在安卓2.2版上收到一个错误,但在2.3版上没有

错误:

 04-26 13:41:34.862: ERROR/Database(3701):  sqlite3_open_v2("/data/data/com.TravelPharm/databases/medicaments.sqlite", &handle, 1, NULL) failed
 04-26 13:41:34.942: DEBUG/dalvikvm(417): GC_EXPLICIT freed 82 objects / 4000 bytes in 1617ms
 04-26 13:41:35.062: DEBUG/asset(3701): Data exceeds UNCOMPRESS_DATA_MAX (17304576 vs 1048576)
 04-26 13:41:35.062: DEBUG/AndroidRuntime(3701): Shutting down VM
 04-26 13:41:35.072: WARN/dalvikvm(3701): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
 04-26 13:41:35.103: ERROR/AndroidRuntime(3701): FATAL EXCEPTION: main
 04-26 13:41:35.103: ERROR/AndroidRuntime(3701): java.lang.Error: Error copying database
 04-26 13:41:35.103: ERROR/AndroidRuntime(3701):     at com.TravelPharm.DBHelper.createDataBase(DBHelper.java:395)
 04-26 13:41:35.103: ERROR/AndroidRuntime(3701):     at com.TravelPharm.TravelPharm.SumofDetails(TravelPharm.java:290)
 04-26 13:41:35.103: ERROR/AndroidRuntime(3701):     at com.TravelPharm.TravelPharm.onCreate(TravelPharm.java:64)
 04-26 13:41:35.103: ERROR/AndroidRuntime(3701):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
 04-26 13:41:35.103: ERROR/AndroidRuntime(3701):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
 04-26 13:41:35.103: ERROR/AndroidRuntime(3701):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
 04-26 13:41:35.103: ERROR/AndroidRuntime(3701):     at android.app.ActivityThread.access$2300(ActivityThread.java:125)
 04-26 13:41:35.103: ERROR/AndroidRuntime(3701):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
 04-26 13:41:35.103: ERROR/AndroidRuntime(3701):     at android.os.Handler.dispatchMessage(Handler.java:99)
 04-26 13:41:35.103: ERROR/AndroidRuntime(3701):     at android.os.Looper.loop(Looper.java:123)
 04-26 13:41:35.103: ERROR/AndroidRuntime(3701):     at android.app.ActivityThread.main(ActivityThread.java:4627)
 04-26 13:41:35.103: ERROR/AndroidRuntime(3701):     at java.lang.reflect.Method.invokeNative(Native Method)
 04-26 13:41:35.103: ERROR/AndroidRuntime(3701):     at java.lang.reflect.Method.invoke(Method.java:521)
 04-26 13:41:35.103: ERROR/AndroidRuntime(3701):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
 04-26 13:41:35.103: ERROR/AndroidRuntime(3701):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
 04-26 13:41:35.103: ERROR/AndroidRuntime(3701):     at dalvik.system.NativeStart.main(Native Method)
我明白这是因为我的数据库太大了“解压数据最大值”,所以我该如何解决这个问题

我会感谢你的帮助


谢谢你

我也有类似的问题,经过多次搜索,我找到了这个页面来回答我的问题

总之,Android压缩任何资产文件,页面上列出的资产文件除外,因为它们已经被压缩。这种压缩通常是一件好事,但当文件太大时,它又会困扰程序员。作者建议的两个选项是:1)将数据库文件重命名为不被压缩的文件(如.jpg),或2)关闭数据库文件扩展名的压缩(请参阅有关如何做到这一点的博客文章)。但是,如果您使用的是Eclipse,那么第2个选项可能会很困难,因此作者建议使用第一个选项

整个问题在Android 2.3.3中得到了纠正,这就是为什么没有出现错误的原因:)

编辑:本网站的解释非常简单:


<>编辑2:回首这个答案,我意识到,根据文件的大小,也许你可以考虑从Web服务器下载文件,然后将它复制到你需要的任何地方。在我的例子中,我将SQLLite数据库复制到应用程序私有存储中,但由于APK已签名,我无法从我的资产中删除旧数据库。所以现在,我不再使用那些古怪的命名方式,而是让它在第一次运行时从互联网上下载,然后放在私人空间中。这样一来,应用程序在第一次运行时的大小就不会翻倍。

我做了Bob上面提到的事情。这对我很有效。 我无法在早于2.3.3的版本上运行该应用程序,但当我将.html文件(由于Web SQL命令,该文件为4MB)重命名为.jet(或中提到的任何已压缩的扩展名)时,它在2.1更新1和2.2上也运行良好


问题是2.3.3之前的Android版本试图压缩/assets/文件夹中所有超过1MB大小的文件。因此,我将其重命名为已经压缩的扩展名,以便Android不再尝试压缩它。虽然我不知道Android编程,但我认为在阅读了上面的内容和一些其他在线链接后,情况就是这样。

我找到了Froyo(2.2)的解决方案,但APK的长度从4.x megs增加到了10.x megs。 简单一点:重新压缩apk文件,压缩为0。 我在Windows上这样做: 1.-将apk文件重命名为zip, 2.-将其解压缩到某个文件夹, 3.-使用“存储”选项再次压缩(我实际上使用的是WinRAR,所以“存储”意味着根本没有压缩), -然后将其从zip重新命名为apk,
5.-并安装。

只需将.db扩展名更改为.png即可在2.2及更高版本的设备中运行。

您可以拆分文件并将拆分的文件放入资产文件夹。
例如,从largfile.db到db1.db、db2.db、db3.db

然后编写代码,将这些文件合并回设备上的largefile.db。

刚刚将扩展名从.txt更改为.jpg,它成功了……非常感谢!感谢有用的链接。