SQlite Database: No se puede encontrar el contexto
Aparentemente hay algún problema con el contexto y en la línea siguiente como estoy obteniendo una NullPointerException
. Creo que algo está mal con el contexto. También cuando estoy tratando de abrir y cerrar la base de datos de dos actividades está lanzando CannotOpenORCloseDatabase
Error. Por favor, ayuda.
DBHelper dbHelper = new DBHelper(this.getApplicationContext());
¿Alguna idea de por qué? O sería genial si alguien pudiera sugerir una solución.
- GetLoaderManager (). InitLoader () no acepta 'this' como argumento aunque la clase (ListFragment) implementa LoaderManager.LoaderCallbacks <Cursor>
- Cómo hacer frente a múltiples cambios en la versión de la base de datos cuando se actualiza la aplicación Android
- La base de datos de Android recrea cada vez que se inicia la aplicación
- Insertar y seleccionar datos en árabe Android SQLite
- por qué c.moveToFirst () no saltará la primera fila
public static final String EXT_CATEGORY = "category"; public static final String EXT_URL = "url"; private String tableName = DBHelper.tableName; private SQLiteDatabase MyDb; private int category; Cursor c = null; public static final String EXT_POS = "position"; private String url; private int position; WebView mWebView; @Override protected void onCreate(Bundle savedInstanceState) { Log.v(LOG_TAG, "onCreate() called"); super.onCreate(savedInstanceState); openAndQueryDatabase(); } private void openAndQueryDatabase() { position = 1; category = 0; Log.v(LOG_TAG, "onCreate() called 3"); try { DBHelper dbHelper = DBHelper.getInstance(getBaseContext()); MyDb = dbHelper.getWritableDatabase(); c = MyDb.rawQuery("SELECT * FROM " + tableName + " where Category =" + category + "AND Position =" + position, null); Log.v(LOG_TAG, "onCreate() called 4"); // url = c.getString(c.getColumnIndex("Image")); url = "www.google.com"; Log.v(url, " URL in Recipe "); } catch (SQLiteException se) { Log.e(getClass().getSimpleName(), "Could not create or Open the database"); }
- ¿Cómo puedo poner datos estáticos en una base de datos SQLite en Android?
- La manera más rápida y eficiente de pre-poblar la base de datos en Android
- ¿Es la operación costosa de SQLite cursor.getCount en Android
- Sqlite onCreate () problema Quiero que mi base de datos creada una vez, y no va a cambiar, pero no puedo crear datos cuando estoy en onCreate ()
- Android permiso de creación de base de datos
- DB de SQLite accedido desde múltiples subprocesos
- Tamaño máximo de Android Cursor
- ¿Cómo sincronizar bases de datos SQLite y MySQL mediante notificaciones push?
Debe declarar su DBHelper como una instancia estática (singleton) para asegurarse de que sólo existe un DBHelper en un momento dado.
public class DBHelper extends SQLiteOpenHelper { private static DBHelper mInstance = null; public static DBHelper getInstance(Context activityContext) { // Get the application context from the activityContext to prevent leak if (mInstance == null) { mInstance = new DBHelper (activityContext.getApplicationContext()); } return mInstance; } /** * Private, use the static method "DBHelper.getInstance(Context)" instead. */ private DBHelper (Context applicationContext) { super(applicationContext, DATABASE_NAME, null, DATABASE_VERSION); } }
Para abrir el uso de SQLiteDatabase:
SQLiteDatabase mDataBase = DBHelper.getInstance(context).getWritableDatabase();
Y cerrarlo
mDataBase.close();
Use constructor for this … Mientras llamaba al contexto de paso de la clase DB como parámetro. como abajo.
public class MyDB { private Context context; private DatabaseHelper DBHelper; private SQLiteDatabase db; public MyDB(Context ctx) { this.context = ctx; DBHelper = new DatabaseHelper(context); } }
Espero que esto te ayudará.
Estás utilizando, DBHelper dbHelper = new DBHelper(this.getApplicationContext());
En su lugar, debe utilizar,
DBHelper dbHelper = new DBHelper(getApplicationContext());
Editar-
Intenta usar
MyDb = getApplicationContext().getWritableDatabase();
en lugar de
DBHelper dbHelper = new DBHelper(this.getApplicationContext()); MyDb = dbHelper.getWritableDatabase();
También intenta quitar el bloque finally()
como sugiere esta respuesta .
Prueba esto
db = new DbHelper(this.getContext());
Deberia de funcionar.