SQLiteOpenHelper onUpgrade se llama varias veces

Tengo una base de datos de solo lectura en mi aplicación de Android que actualizo periódicamente. La aplicación siempre lleva consigo la versión actualizada de la base de datos en sus activos.

Incremento el número de versión que paso al constructor de mi subclase SQLiteOpenHelper, pasando a la versión 4 (en este caso).

Tengo el siguiente código:

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    // copy from assets to local storage; version really doesn't matter;
    // DB will be opened from the target location. 
    copyDataBase();
}

Esto se llama cuando hago una llamada para obtener una base de datos legible:

SQLiteDatabase db = myDBHelper.getReadableDatabase();
// Here db.getVersion() correctly returns "4", the newVersion.
// db is also usable and has the correct data.

Pero cada vez que llamo a getReadableDatabase onUpgrade se llama de oldVersion = 3 a newVersion = 4.

¿Alguna idea de por qué la versión no se pega?

Respuesta 1

Bueno, un par de cosas.

La llamada "copyDataBase ()" es un poco sospechosa, ya que podría estar copiando alguna copia guardada de su base de datos que tiene el código de la versión anterior. db.getVersion () podría estar usando lo que se pasó al constructor de su clase auxiliar y no leerlo desde ningún lado. Así que lo verificaría dos veces o lo publicaría.

También asegúrese de llamar al superconstructor desde su subclase:

   DatabaseHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
        Log.d("DatabaseHelper", "constructor. Version="+DATABASE_VERSION);
    }

Y asegúrese de que la salida del registro muestre "4" y no 3 en su caso.

Respuesta: 2

Entonces, estoy tratando de hacer un programa que lea args y transforme todas las letras en mayúsculas sin el uso de toUpperCase (). La única forma que tengo que usar para procesar las letras individuales es con "- 'a' ...

Estoy tratando de agregar un botón dinámicamente en el método onPostExecute de AsyncTask. Estoy haciendo esto dentro de una clase que extiende Fragment. Puedo usar este código para crear dinámicamente un botón fuera de ...

Siguiendo este tutorial, estoy en el paso 7 y no entiendo qué hacer en PolicyTool. Necesito eso para asignar mi applet en mi aplicación, porque cuando ejecuto mi applet obtuve una SecurityException ...

¿Existe tal solución para facilitar el tedioso logger.debug ("bla-bla") para mis métodos? Específicamente, es posible generar automáticamente un código como este: if (logger.LEVEL == Level.DEBUG) {...