Falta de tabla en SQLite con la versión específica de HTC DESIRE HD
Mi aplicación tiene una base de datos SQLite en la carpeta de activos. Cuando el usuario inicia mi aplicación, se crea la base de datos y también las tablas.
Esto funciona bien con una gran cantidad de dispositivos (Nexus One, Htc Magic, SGS, X10 … e incluso Htc Desire HD v2.2). Mi aplicación funciona con todas las versiones de Android (probado en mi dispositivo (1.6, 2.2, 2.2.1 Htc Magic) y en el emulador (v1.5 hasta v2.3).
- Android - ¿Cuáles son las buenas herramientas de informes para diseñar y generar informes desde SQLite Data Source?
- ¿Cómo insertar un registro SQLite con una fecha y hora establecida en 'ahora' en la aplicación de Android?
- Utilice Insertar o Reemplazar en ContentProvider
- Android abrir o crear base de datos
- Intenta reabrir un objeto ya cerrado: sqlitequery
Tengo un problema con HTC DESIRE HD v2.2.1 1.72.405.3.
El logcat:
Android.database.sqlite.SQLiteException: no such tabla: LISTE:, while compilando: select _id de LISTE en android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2833) at android.app.ActivityThread.handleLaunchActivity (ActivityThread.java: 2854) en android.app.ActivityThread.access $ 2300 (ActivityThread.java:136) en android.app.ActivityThread $ H.handleMessage (ActivityThread.java:2179) en android.os.Handler.dispatchMessage (Handler.java:99) En android.os.Looper.loop (Looper.java:143) en android.app.ActivityThread.main (ActivityThread.java:5068) en java.lang.reflect.Method.invokeNative (Método nativo) en java.lang.reflect .Method.invoke (Method.java:521) en com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:858) en com.android.internal.os.ZygoteInit.main (ZygoteInit.java:616 ) En dalvik.system.NativeStart.main (Método nativo) Causado por: android.database.sqlite.SQLiteException: no hay tal tabla: LISTE:, mientras compila: select _id de LISTE en android.database.sqli Te.SQLiteCompiledSql.native_compile (Método nativo) en android.database.sqlite.SQLiteCompiledSql.compile (SQLiteCompiledSql.java:91) en android.database.sqlite.SQLiteCompiledSql. (SQLiteCompiledSql.java:64) en android.database.sqlite.SQLiteProgram (SQLiteProgram.java:80) en android.database.sqlite.SQLiteQuery. (SQLiteQuery.java:46) en android.database.sqlite.SQLiteDirectCursorDriver.query (SQLiteDirectCursorDriver.java:53) en android.database.sqlite.SQLiteDatabase. RawQueryWithFactory (SQLiteDatabase.java:1417) en android.database.sqlite.SQLiteDatabase.rawQuery (SQLiteDatabase.java:1387) … más
Mi aplicación crea la base de datos pero no copia las tablas del archivo de la carpeta de elementos en data\data\packagename\databases\mydatabase
.
Mi código:
public void createDataBase() throws IOException{ boolean dbExist = checkDataBase(); if(dbExist){ //do nothing - database already exist }else{ //By calling this method and empty database will be created into the default system path //of your application so we are gonna be able to overwrite that database with our database. this.getReadableDatabase(); try { copyDataBase(); } catch (IOException e) { throw new Error("Error copying database"); } } } private void copyDataBase() throws IOException{ //Open your local db as the input stream InputStream myInput = myContext.getAssets().open(DB_NAME); // Path to the just created empty db String outFileName = DB_PATH + DB_NAME; //Open the empty db as the output stream OutputStream myOutput = new FileOutputStream(outFileName); //transfer bytes from the inputfile to the outputfile byte[] buffer = new byte[1024]; int length; while ((length = myInput.read(buffer))!= -1){ if (length > 0){ myOutput.write(buffer, 0, length); } } //Close the streams myOutput.flush(); myOutput.close(); myInput.close(); }
Creo que la función copydatabase
tiene un problema pero no lo veo.
Este código funciona bien con todos los dispositivos excepto el HTC DESIRE HD v2.2.1 1.72.405.3.
¿Qué problemas pueden existir aquí para el HTC Desire con la versión anterior? ¿Cómo se puede remediar esto?
- ¿Cómo comunicarse entre WebView y JavaScript?
- Cómo utilizar TRIGGER en Android SQLite
- Android + Robolectric - RuntimeException / InstantiationException en queryBuilder.query () en ContentProvider
- ¿Podemos actualizar el APK en Google Play Store sin cambiar la versión de APP
- ¿Cómo comprobar si el valor ya existe en la base de datos android sqlite?
- IOS / Android sincronización con Delphi / C # aplicación de escritorio
- Diferencias de rendimiento entre SQLite en Android e iOS
- Sqlite no devuelve ninguna tabla, pero la tabla está presente cuando se obtiene en el dispositivo OnePlusTwo
Esto es un poco una suposición y implicaría que hay un "error" en esa versión de Android para el Desire HD por lo que puede ser salvajemente fuera.
Me pregunto si esa versión de Android no crea la base de datos donde debe hacer. Está asumiendo que DB_PATH es \ data \ data \ packagename \ databases \ como normalmente sería pero ¿y si no lo es? El resultado sería el siguiente …
-
this.getReadableDatabase()
creará una base de datos vacía en \ some \ incorrect \ path \ mydatabase - El uso de
new FileOutputStream(outFileName)
simplemente crea un nuevo archivo binario vacío porque lo anterior no creó una base de datos en el lugar que usted espera. - La copia se ha realizado correctamente
- Antes de realizar la solicitud SELECT, se solicita el acceso a la base de datos utilizando
getReadableDatabase()
ogetWriteableDatabase()
pero ambos abrirán simplemente la base de datos vacía que se creó en el paso 1.
En resumen, el proceso de copia puede haber funcionado correctamente, pero el DB que se está operando está vacío y en un lugar diferente a donde usted lo espera.
Sólo una idea (he visto cosas similares suceder a lo largo de los años).