android - 我收到此错误 : Data exceeds UNCOMPRESS_DATA_MAX on 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 / 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)

我明白这是因为我的数据库太大“UNCOMPRESS_DATA_MAX”所以我该如何解决这个问题??

我将不胜感激,

谢谢!!!

最佳答案

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

http://ponystyle.com/blog/2010/03/26/dealing-with-asset-compression-in-android-apps/

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

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

编辑:这个网站解释得很简单: https://web.archive.org/web/20120423232710/http://www.nutprof.com/2010/12/data-exceeds-uncompressdatamax.html

编辑2:回顾这个答案,我意识到根据文件的大小,也许您可​​以考虑从网络服务器下载文件,然后将其复制到您需要的任何地方。就我而言,我正在将 SQLLite DB 复制到应用程序私有(private)存储中,但由于 APK 已签名,我无法从我的 Assets 中删除旧数据库。所以现在我不再使用那些时髦的命名东西,而是去让它在第一次运行时从互联网上下载并放在私有(private)空间中。这样,应用程序在第一次运行时不会使其大小翻倍。

关于android - 我收到此错误 : Data exceeds UNCOMPRESS_DATA_MAX on android 2. 2 但在 2.3 上没有,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5789177/

相关文章:

android - 如何创建 Activity View

android - AutoCompleteTextView 下拉列表显示空 textView

Android,Tabs 的内容重叠

android - 状态列表可绘制和禁用状态

Android 设备性能评估技术

android - 如何创建带选项卡的对话框

java - Android 无法找到已放入 SD 卡的文件目录

android - 调用后如何恢复exoplayer

java - 如何读取通过蓝牙发送的传入值?

android - java.util.zip.ZipException : duplicate entry: android/support/v7/graphics/drawable/DrawableUtils. 类