PDA

Ver la Versión Completa : [ CONSULTA ] No puedo leer mi DataBase en Gingerbread


Bongiovi
16/08/13, 01:42:05
Esto me trae de cabeza :(

Tenog una base de datos en la carpeta Assets de mi app, funciona perfectamente en Android 4.0 , 4.1 y 4.2. Pero no en Froyo ni Gingerbread!!!!!

No encuentro solución por ningún lado, aquí dejo mi DataBaseHelper:

public class BaseDatosHelper extends SQLiteOpenHelper
{
private static String DB_PATH = "/data/data/MiPaquete/databases/";
private static String DB_NAME = "MiDB";
private SQLiteDatabase myDataBase;
private final Context myContext;

//Guarda una referencia al contexto para acceder a la carpeta assets de la aplicación y a los recursos.
public BaseDatosHelper(Context context)
{
super(context, DB_NAME, null, 1);
this.myContext = context;
}

// Crea una base de datos vacía en el sistema y la sobreescribe con la que hemos puesto en Assets.
public void crearDataBase() throws IOException
{
boolean dbExist = comprobarBaseDatos();

if(dbExist)
{
}
else
{
//Si no existe, creamos una nueva Base de datos en la carpeta por defecto de nuestra aplicación,
//de esta forma el Sistema nos permitirá sobreescribirla con la que tenemos en la carpeta Assets.
this.getReadableDatabase();
try
{
copiarBaseDatos();
}
catch (IOException e)
{
throw new Error("Error al copiar la Base de Datos");
}
}
}

private boolean comprobarBaseDatos()
{
SQLiteDatabase checkDB = null;
try
{
String myPath = DB_PATH + DB_NAME;
checkDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);
}
catch(SQLiteException e)
{
//No existe
}

if(checkDB != null)
{
checkDB.close();
}

return checkDB != null ? true : false;
}

/*
Copia la base de datos desde la carpeta Assets sobre la base de datos vacía recién creada en la carpeta del sistema,
desde donde es accesible.
*/
private void copiarBaseDatos() throws IOException
{

//Abrimos la BBDD de la carpeta Assets como un InputStream
InputStream myInput = myContext.getAssets().open(DB_NAME);

//Carpeta de destino (donde hemos creado la BBDD vacia)
String outFileName = DB_PATH + DB_NAME;

//Abrimos la BBDD vacia como OutputStream
OutputStream myOutput = new FileOutputStream(outFileName);

//Transfiere los Bytes entre el Stream de entrada y el de Salida
byte[] buffer = new byte[1024];
int length;
while ((length = myInput.read(buffer))>0)
{
myOutput.write(buffer, 0, length);
}

//Cerramos los ficheros abiertos
myOutput.flush();
myOutput.close();
myInput.close();
}

//Abre la base de datos
public void abrirBaseDatos() throws SQLException
{
String myPath = DB_PATH + DB_NAME;
myDataBase = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);
}

//Cierra la base de datos
@Override
public synchronized void close()
{
if(myDataBase != null)
myDataBase.close();

super.close();
}

@Override
public void onCreate(SQLiteDatabase db)
{

}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
{

}


(Método para obtener una ArrayList al leer la DataBase)

}

He probado a quitarle la extensión ".db" a la database, utilizar getAbsolutePath() en vez de hardcodear la ruta del archivo, nada. Que por debajo de 4.0 no funciona.

Ayuda!!

Aquí algo del LogCat:

08-16 00:35:34.145: I/SqliteDatabaseCpp(1595): sqlite returned: error code = 1, msg = no such column: locale, db=/data/data/MiPaquete/databases/tallas.db
08-16 00:35:34.145: E/SqliteDatabaseCpp(1595): SELECT locale FROM android_metadata failed
08-16 00:35:34.145: E/SQLiteDatabase(1595): Failed to open the database. closing it.