2011-01-10 13 views
8

Por alguna razón, la solución de manejo de base de datos descrita en this article no funciona en el HTC Desire HD después de obtener la actualización OTA a 2.2.1 (1.72 .405.3). Funcionó en Desire HD antes de la actualización y no reproduje el error en los dispositivos reales que ejecutan 2.1, 2.2 ni en el emulador que ejecuta todas las versiones.El manejo de la base de datos dejó de funcionar en Android 2.2.1 (Desire HD 1.72.405.3)

Desafortunadamente no se puede crear un AVD para emulador con Android 2.2.1 y he probado una ROM basada en 2.2.1 (tengo un HTC Desire ordinario rooteado) pero mi aplicación funciona sin problemas también . Entonces, la pregunta es si está usando el SDK de Android de alguna manera, ¿no debería ser que de repente causa el problema?

Sé que este es un problema muy específico, pero como hay más desarrolladores que yo que informan sobre el problema y que no se puede crear un AVD, espero que la pregunta sea aceptada y espero que alguien tenga una idea de lo que podría causar el problema.

Aquí hay un seguimiento de pila enviado a mi cuenta de mercado por el usuario:

Caused by: android.database.sqlite.SQLiteDiskIOException: disk I/O error 
at android.database.sqlite.SQLiteDatabase.native_setLocale(Native Method) 
at android.database.sqlite.SQLiteDatabase.setLocale(SQLiteDatabase.java:2049) 
at android.database.sqlite.SQLiteDatabase.<init>(SQLiteDatabase.java:1917) 
at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:889) 
at android.database.sqlite.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.java:168) 
at com.MyApp.DataBaseHelper.createDataBase(DataBaseHelper.java:81) 
at com.MyApp.InitialActivity.onCreate(InitialActivity.java:33) 
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2797) 
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1066) 

métodos relacionados se pueden encontrar en Pastebin. Como solo se puede incluir un hipervínculo, se puede encontrar un enlace en los comentarios a continuación. Tenga en cuenta que la línea 81 que se encuentra en el seguimiento de la pila es la línea 10 en pastebin.

+0

http://pastebin.com/VTmCkeLq –

+0

Comentarios adicionales de otros usuarios sobre el mismo problema se pueden leer en este comentario y debajo: http://www.reigndesign.com/blog/using-your-own-sqlite -database-in-android-applications/comment-page-4/# comment-43655 –

+0

¿la configuración regional en_US no está disponible en la nueva versión de Android 2.2.1? Desde el origen de Android SQLiteDatabase.setLocale: "@throws SQLException si no se pudo establecer la configuración regional. La razón más común para esto es que no hay un recopilador disponible para la configuración regional que solicitó". –

Respuesta

5

Parece que finalmente tengo mi aplicación para trabajar en Android 2.2.1 en Desire HD. No he tenido la oportunidad de depurarlo personalmente para probar exactamente qué es lo que está causando el problema.

Una idea que surgió es la ruta codificada en el lugar donde se encuentra el archivo de la base de datos. DB_PATH = "/ data/data/YOUR_PACKAGE/databases /";

Supongo que es posible que esta ruta no sea válida en Android 2.2.1 para Desire HD. Cambié esta ruta con: Environment.getDataDirectory() + "/ data/YOUR_PACKAGE/databases /" + DB_NAME;

Intentaré identificar el problema cuando tuve la oportunidad de probarlo yo mismo. Si alguien prueba esta solución, hágamelo saber si lo resuelve.

0

, así como la excelente respuesta de Björn, este enlace trabajado para mí:

Link on AndDev.org

Parece que tiene que cerrar especificamente el regreso de this.getReadableDatabase();

Cuestiones relacionadas