Intentando probar SQLiteOpenHelper pero getWritableDatabase () lanza Null
Estoy intentando escribir una prueba junit contra mi base de datos de aplicaciones en Android Studio usando mi objeto SQLiteOpenHelper. Cada vez que golpea el método de inserción obtengo una NullPointerException. He ido de ida y vuelta entre el uso de getContext () y un mockContext I configuración, pero no dados. Tengo mi emulador en funcionamiento. ¿Puede alguien decirme por favor qué estoy haciendo mal?
public class LocationDatabaseHelperTest extends AndroidTestCase { private SQLiteDatabase testDB; private SQLiteDatabase readDB; private LocationDatabaseHelper dbh; private RenamingDelegatingContext mockContext; private ContentValues cv; /** *Sets up a mock context to initialize the * LocationDatabaseHelper object. * @throws Exception */ public void setUp() throws Exception { super.setUp(); final String prefix = "test"; mockContext = new RenamingDelegatingContext(getContext(),prefix); dbh = new LocationDatabaseHelper(mockContext); try { testDB = dbh.getWritableDatabase(); } catch(Exception ex){ ex.printStackTrace(); } readDB = dbh.getReadableDatabase(); cv = new ContentValues(); } /** *Tests that asserts LocationDatabaseHelper object instantiates. */ public void testLocationDatabaseHelper() { assertNotNull(dbh); } public void testInsert() { String id = "seattle"; float heading = (float) 20.178545; double longitude = 122.20; double lat = 47.37; float speed = (float) 65.4587; long time = System.currentTimeMillis(); LocationPackage locations = new LocationPackage(id,heading,longitude, lat,speed, time); cv.put(dbh.COLUMN_LOCATION_id, (String) locations.id); cv.put(dbh.COLUMN_LOCATION_HEADING, (float) locations.heading); cv.put(dbh.COLUMN_LOCATION_lat, (double) locations.latitude); cv.put(dbh.COLUMN_LOCATION_SPEED, (float) locations.speed); cv.put(dbh.COLUMN_LOCATION_long, (double) locations.longitude); cv.put(dbh.COLUMN_LOCATION_TIMESTAMP, (long) locations.time); testDB.insert(dbh.TABLE_LOCATION, null, cv); String selectQuery = "SELECT * FROM " + dbh.TABLE_LOCATION; Log.i(dbh.toString(), selectQuery); Cursor c = readDB.rawQuery(selectQuery, null); if(c!=null) c.moveToFirst(); String locID = c.getString(c.getColumnIndex(dbh.COLUMN_LOCATION_id)); //Log.i("LocationID: ", locID); assertEquals(locID, "userid"); //assertTrue(insertID != -1); } public void tearDown() throws Exception { super.tearDown(); //dbh.clearDatabase(); } }
- ¿Es realmente necesario crear tablas SQLite cada vez que se inicia la aplicación?
- GetReadableDatabase a menudo, pero no siempre devuelve null
- Obtención de contexto en onCreate en SQLiteOpenHelper
- Abra / cierre correctamente una base de datos con el patrón de diseño Singleton
- Cursor finalizado sin cerrar antes () Android
- SQLiteDatabase.openDatabase vs SQLiteOpenHelper.getReadableDatabase
- Intenta reabrir un objeto ya cerrado: sqlitequery
- SQLiteOpenHelper sincronización
- AsyncTask de Android y instancia de SQLite DB
- Ejemplo de Android SQLite
- El objeto de conexión de SQLite se filtró - Android
- SQLiteOpenHelper múltiples bases de datos en memoria
- cómo crear base de datos una sola vez, a continuación, leer y escribir varias veces desde él, SQLite, OpenHelper, Android
Has olvidado abrir tu base de datos. Hacer dbh.open (). Después de eso, no olvide cerrar su db.