2011-04-26 5 views
15

Recibo un error solo en la versión android 2.2 pero no en 2.3.Recibo este error: Los datos exceden UNCOMPRESS_DATA_MAX en android 2.2 pero no en 2.3

El error:

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) 

entiendo que es porque mi base de datos es demasiado grande "UNCOMPRESS_DATA_MAX" Entonces, ¿cómo puedo solucionar el problema ??

apreciaré cualquier ayuda,

Gracias !!!

Respuesta

28

Yo también tengo un problema similar y después de mucha búsqueda, encontré esta página para responder mi pregunta.

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

En resumen, Android comprime cualquier archivo activo, excepto los que están en la lista de la página, ya que ya están comprimidos. Esta compresión generalmente es algo bueno, pero vuelve a atormentar a los programadores cuando un archivo es demasiado grande. Las dos opciones que sugiere el autor son 1) renombrar el archivo de base de datos para que sea uno que no se comprima (como .jpg) o 2) desactivar la compresión para la extensión de archivo de la base de datos (consulte la publicación del blog sobre cómo hacerlo) ese). Sin embargo, el número 2 puede ser difícil si está usando Eclipse, por lo que el autor recomienda usar la primera opción.

Todo este problema se corrigió en Android 2.3.3 es por ello que no tiene aparece el error :)

EDIT: Este sitio explica lo que realmente simple: https://web.archive.org/web/20120423232710/http://www.nutprof.com/2010/12/data-exceeds-uncompressdatamax.html

EDIT 2: Buscando De regreso en esta respuesta, me doy cuenta de que, dependiendo del tamaño de su archivo, tal vez podría considerar descargar el archivo desde un servidor web y luego copiarlo donde lo necesite. En mi caso, estaba copiando una base de datos SQLLite en la aplicación de almacenamiento privado, pero como la APK está firmada, no pude deshacerme de la base de datos anterior de mis archivos. Así que ahora, en lugar de todo ese nombre funky, simplemente fui y lo descargué de Internet en la primera ejecución y lo puse en el espacio privado. De esta forma, la aplicación no duplica su tamaño en la primera ejecución.

+0

acaba de cambiar la extensión de .txt a .jpg, y funcionó ... muchas gracias hombre! –

+0

Gracias por enlaces útiles. –

2

Hice lo que Bob mencionó anteriormente. Funciono muy bien para mi. No pude ejecutar la aplicación en versiones anteriores a 2.3.3 pero cuando renombré mi archivo .html (que era de 4MB debido a comandos Web SQL) a .jet (o para el caso cualquier extensión ya comprimida como se menciona en enter link description here), funcionó bien en 2.1 update1 y 2.2 también.

El problema era que las versiones de Android anteriores a 2.3.3 estaban intentando comprimir todos los archivos de más de 1MB de tamaño en la carpeta/assets /. Así que lo renombré a la extensión ya comprimida para que Android no intente comprimirlo nuevamente. Aunque no conozco la programación de Android, creo que eso es lo que está sucediendo después de leer los enlaces anteriores y algunos otros enlaces en línea.

1

Encontré una solución para Froyo (2.2), pero el APK tiene de 4.x megas de largo a 10.x megas. Que sea simple: rezip el archivo APK, con compresión 0. Hice esto en Windows: 1.- Cambie el nombre del archivo APK a postal, 2.-descomprimirlo en alguna carpeta, 3.-Zip de nuevo con Opción "store" (realmente estoy usando WinRAR, entonces "store" significa que no hay compresión), 4.-luego renómbrela de zip a apk, 5.-e instálela.

0

Simplemente cambiando la extensión .db a .png será trabajado en 2.2 y anteriores dispositivos

0

puede dividir el archivo y poner la carpeta de archivos divididos en activos.
Por ejemplo, largfile.db a db1.db, db2.db, db3.db
Y a continuación, escriba el código para combinar estos archivos a largefile.db en el dispositivo.

Cuestiones relacionadas