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.

 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"); } 

4 Solutions collect form web for “SQlite Database: No se puede encontrar el contexto”

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.

  • Cómo reemplazar CursorAdapter bindView
  • Android SqliteAssetHelper - fusionar las tablas de la base de datos del activo con el existente
  • SQLiteOpenHelper no puede llamar a onCreate?
  • ¿Es seguro ejecutar una nueva consulta SQLite mientras itera sobre el cursor para una consulta anterior? (Androide)
  • El grupo por consulta no funciona en android 2.1
  • SQLiteQueryBuilder.query () vs SQLiteDatabase.query ()
  • Android SQLite Excepción: no se puede cerrar debido a declaraciones sin finalizar
  • Seleccione sólo los descendientes directos de la tabla con una ruta materializada
  • Android getColumName y getColumnIndex
  • Android SQLite - selecciónArgs que no sean cadenas
  • Consulta SQLite en orden alfabético no sensible a mayúsculas
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.