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

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 deshabilitar el archivo de diario SQLite de SQL?
  • Confuso respecto a SQLiteOpenHelper y crear varias tablas
  • Cursor.moveToNext () devuelve false mientras Cursor.getCount () dice que son más de 1 fila
  • Ormlite Android inserciones masivas
  • Actualización de Android 6.0 que causa DB sqlite falla durante init
  • Android: ¿necesito cerrar los objetos Cursor?
  • ¿Cuál es el propósito de FeedReaderContract y cómo definir la clase interna en OpenHelper Class
  • ¿Cómo obtener todos los nombres de tablas en la base de datos Android sqlite?
  • Problema de base de datos SQLite en TextView
  • Permiso de negación: esto requiere android.permission.INTERACT_ACROSS_USERS_FULL
  • SQLite LIKE alternativa para REGEXP, Match Start de cualquier palabra
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.