El manejo de la base de datos dejó de funcionar en Android 2.2.1 (Desire HD 1.72.405.3)

Por alguna razón, la solución de manejo de bases de datos descrita en este artículo no funciona en el HTC Desire HD después de obtener la actualización de 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.

Lamentablemente, no se puede crear un AVD para el 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 también funciona sin problemas. 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 tema muy específico, pero dado que 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 stack enviado a mi cuenta de Market por 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.(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) 

Los 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 stack es la línea 10 en pastebin.

Finalmente parece que 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.

Un pensamiento que surgió es el camino codificado para encontrar 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;

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

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

Enlace en AndDev.org

Parece que tiene que cerrar específicamente el retorno de this.getReadableDatabase ();