2011-04-26 30 views
15

我收到一個錯誤只在Android 2.2版本,但不是2.3。我得到這個錯誤:數據超出UNCOMPRESS_DATA_MAX在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」憑什麼我解決這個問題?

我會感謝任何幫助,

謝謝!!!

回答

28

我也有類似的問題,經過多次搜索,我發現這個網頁回答我的問題。

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

總之,Android的壓縮,除了在頁面上列表中的那些資產的任何文件,因爲它們已經壓縮。這種壓縮通常是一件好事,但當文件太大時,它會回頭困擾程序員。作者建議的兩個選項是1)將數據庫文件重命名爲不壓縮的文件(如.jpg)或2)關閉數據庫文件擴展名的壓縮(請參閱關於如何操作的博客文章那)。編號2可能很難,但如果您使用Eclipse,則作者建議使用第一個選項。該網站介紹了它真的只是: https://web.archive.org/web/20120423232710/http://www.nutprof.com/2010/12/data-exceeds-uncompressdatamax.html

編輯2:

這整個問題中的Android 2.3.3這就是爲什麼你沒有出現錯誤:)

編輯修正展望回到這個答案,我意識到根據文件的大小,也許你可以考慮從Web服務器上下載文件,然後將它複製到任何你需要的地方去。就我而言,我是在將SQLLite數據庫複製到應用程序私有存儲中,但由於APK已簽名,因此無法從我的資源中刪除舊數據庫。所以,現在,我不是所有那些時髦的命名的東西,我只是去第一次運行它從互聯網上下載它,並把它放在私人空間。這樣,應用程序在第一次運行時不會加倍。

+0

只是將擴展名從.txt更改爲.jpg,它的工作......謝謝很多人! – 2012-08-10 18:25:00

+0

感謝您使用有用的鏈接。 – 2015-01-04 10:48:04

2

我做了Bob上面提到的。它對我很好。 我無法在2.3.3以前的版本上運行該應用程序,但當我將.html文件(由於Web SQL命令,這是4MB)重命名爲.jet時(或者對於這種情況,任何已經壓縮的擴展名,如enter link description here ),它在2.1 update1和2.2也很好。

問題是Android 2.3.3以前版本試圖在/ assets /文件夾中壓縮超過1MB大小的所有文件。所以,我將它重命名爲已經壓縮的擴展名,以便Android不會再嘗試壓縮它。雖然我不知道Android編程,但我認爲在閱讀上述和其他幾個在線鏈接後會發生什麼。

1

我找到了Froyo(2.2)的解決方法,但是APK從4.x megs長到10.x megs。 簡單化:重新壓縮apk文件,壓縮爲0. 我在Windows上做過這樣的操作: 1.將APK文件重命名爲zip, 2.將其解壓縮到某個文件夾中012-3.將其重新壓縮「存儲」選項(我真的使用WinRAR,所以「存儲」意味着完全不壓縮), 4.-然後將其從zip重命名爲apk, 5.-並安裝它。

0

只是改變了.db擴展到.png格式將在2.2及以上的設備

0

您可以分割的文件,把文件分割資產的文件夾的工作。
對於例如largfile.db到db1.db,db2.db,db3.db
然後編寫代碼將這些文件合併回設備上的largefile.db。

相關問題