我收到此错误:数据超过Android 2.2上的UNCOMPRESS_DATA_MAX但不是2.3

lid*_*ido 15 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)
Run Code Online (Sandbox Code Playgroud)

我明白这是因为我的数据库太大了"UNCOMPRESS_DATA_MAX"所以我怎么能解决这个问题?

我会感激任何帮助,

谢谢!!!

Bob*_*Bob 28

我也有类似的问题,经过多次搜索,我发现这个页面回答了我的问题.

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

总之,Android会压缩除页面上列出的资产文件之外的任何资产文件,因为它们已经被压缩.这种压缩通常是一件好事,但是当文件太大时,它会回到程序员身上.作者建议的两个选项是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:回顾这个答案,我意识到,根据文件的大小,您可以考虑从Web服务器下载文件,然后将其复制到您需要的任何地方.在我的情况下,我正在将SQLLite数据库复制到应用程序私有存储,但由于APK已签名,我无法从我的资产中删除旧数据库.所以现在不是所有那些时髦的命名内容,我只是去了第一次从互联网上下载它并把它放在私人空间.这样,应用程序在首次运行时不会使其大小加倍.