Estoy teniendo un problema con una clase que he hecho en Android Studio que extiende de SQLiteOpenHelper
. El problema es el siguiente: He creado una clase que extiende de SQLiteOpenHelper
que maneja una tabla de una base de datos. Ya he creado más bases de datos con esta librería y no he tenido ningún problema hasta ahora. En esta clase parece ser que no crea la base de datos o la tabla, he probado a cambiar de activity por si fuese el contexto, pero parece que ese no es el problema, también he revisado que la consulta del CREATE TABLE ejecute sin errores y lo hace sin problema. El error que me da es el siguiente:
java.lang.NullPointerException: Attempt to invoke virtual method 'android.database.sqlite.SQLiteDatabase android.content.Context.openOrCreateDatabase(java.lang.String, int, android.database.sqlite.SQLiteDatabase$CursorFactory, android.database.DatabaseErrorHandler)' on a null object reference
Y me da en la siguiente línea de código del método getIdsLugares()
, que es la primera que ejecuta cuando ya he creado e inicializado la clase de la base de datos y quiero consultar unos datos:
SQLiteDatabase db=getReadableDatabase();
A continuación os dejo el código de la clase. Espero que me podáis ayudar porque yo ya he probado de todo y no sé que puede ser. Un saludo y gracias.
public class BDLugares extends SQLiteOpenHelper{
static String DB_NAME="mijaresapp";
static final String TABLE_NAME="lugares";
static final String[] COLUMNAS={"idcategoria","categoria","descripcion","direccion","imagen","pathimagen","lat","lon","ruta","titulo","id"};
String queryCreation="CREATE TABLE "+TABLE_NAME+" ("+COLUMNAS[0]+" TEXT, "+COLUMNAS[1]+" TEXT, "+COLUMNAS[2]+
" TEXT, "+COLUMNAS[3]+" TEXT, "+COLUMNAS[4]+" TEXT, "+COLUMNAS[5]+" TEXT, "+COLUMNAS[6]+
" DOUBLE, "+COLUMNAS[7]+" DOUBLE, "+COLUMNAS[8]+" TEXT, "+COLUMNAS[9]+" TEXT, "+ COLUMNAS[10]+" TEXT)";
static final int VERSION_ACTUAL=1;
public BDLugares(Context context) {
super(context, DB_NAME, null, VERSION_ACTUAL);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(queryCreation);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
public Cursor getIdsLugares(){
SQLiteDatabase db=getReadableDatabase();
Cursor c=db.rawQuery("SELECT "+COLUMNAS[10]+" FROM "+TABLE_NAME,null);
return c;
}
public long setDatosLugares(ItemCardMap item){
SQLiteDatabase db=getWritableDatabase();
ContentValues c = new ContentValues();
c.put(COLUMNAS[0],item.getParentID());
c.put(COLUMNAS[1],item.getTipo());
c.put(COLUMNAS[2],item.getContenido());
c.put(COLUMNAS[3],item.getDireccion());
c.put(COLUMNAS[4],item.getImagen());
c.put(COLUMNAS[5],item.getPathImagen());
c.put(COLUMNAS[6],item.getLat());
c.put(COLUMNAS[7],item.getLon());
c.put(COLUMNAS[8],item.getRuta());
c.put(COLUMNAS[9],item.getNombre());
c.put(COLUMNAS[10],item.getId());
long n=db.insert(TABLE_NAME,null,c);
return n;
}
public int borrarDatos(String id){
SQLiteDatabase db=getWritableDatabase();
String[] datos={id};
int n=db.delete(TABLE_NAME,COLUMNAS[1]+"=?",datos);
db.close();
return n;
}
public int borrarDatos(ArrayList ids){
String[] datos=new String[ids.size()];
for(int i=0; i<ids.size(); i++){
datos[i]= String.valueOf(ids.get(i));
}
SQLiteDatabase db=getWritableDatabase();
int n=db.delete(TABLE_NAME,COLUMNAS[1]+"=?",datos);
db.close();
return n;
}
public Cursor traerDatosCategoria(String parentID){
SQLiteDatabase db=getReadableDatabase();
String[] datos={parentID};
Cursor c=db.rawQuery("SELECT * FROM "+TABLE_NAME+" WHERE "+COLUMNAS[0]+"=?",datos);
return c;
}
}