Android NullPointerException al ejecutar la consulta en la base de datos SQLite
Estoy tratando de leer datos de una base de datos que he creado, pero siempre obtengo una NullPointerException al intentar recuperar todos mis registros.
Prácticamente copypasted el código de otra aplicación que tengo funcionando perfectamente, pero de alguna manera estoy haciendo mal aquí.
- Consulta SQLite que contiene caracteres especiales
- SQLite de Android CursorIndexOutOfBounds
- ¿Restricciones de clave externa en Android usando SQLite? En Eliminar cascada
- Android - SQLiteException: near "=": error de sintaxis (código 1)
- Obtener el resultado del cursor y convertirlo en una cadena para TextView
El NullPointerException está en la línea de
return mDb.query(DATABASE_TABLE_LOCALLOGIN, new String[] {LOCALLOGIN_ID, LOCALLOGIN_LOGIN, LOCALLOGIN_PASSWORD}, null, null, null, null, null);
Aquí está el código relevante (no importa los arrays de cadenas, su para agregar tablas más adelante: GoingOutDbAdapter.java
public class GoingOutDbAdapter { private static final String DATABASE_NAME = "GoingOutData"; private static final String DATABASE_TABLE_LOCALLOGIN = "LocalLogin"; public static final String LOCALLOGIN_ID = "LocalLogin_id"; public static final String LOCALLOGIN_LOGIN = "Login"; public static final String LOCALLOGIN_PASSWORD = "Password"; private static final String TAG = "Debugstring"; private DatabaseHelper mDbHelper; private SQLiteDatabase mDb; private static final String[] DATABASE_CREATE = { "CREATE Table " + DATABASE_TABLE_LOCALLOGIN + " ( " + LOCALLOGIN_ID + " integer PRIMARY KEY Autoincrement, " + LOCALLOGIN_LOGIN + " text NOT NULL, " + LOCALLOGIN_PASSWORD + " text NOT NULL );"}; private final Context mCtx; private static class DatabaseHelper extends SQLiteOpenHelper { DatabaseHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } @Override public void onCreate(SQLiteDatabase db) { for(int i = 0; i < DATABASE_CREATE.length; i++){ Log.d(TAG,DATABASE_CREATE[i]); db.execSQL(DATABASE_CREATE[i]); } } } public GoingOutDbAdapter(Context ctx) { this.mCtx = ctx; } public GoingOutDbAdapter open() throws SQLException { mDbHelper = new DatabaseHelper(mCtx); mDb = mDbHelper.getWritableDatabase(); return this; } public void close() { mDbHelper.close(); } public Cursor fetchAllLocalLogins() { return mDb.query(DATABASE_TABLE_LOCALLOGIN, new String[] {LOCALLOGIN_ID, LOCALLOGIN_LOGIN, LOCALLOGIN_PASSWORD}, null, null, null, null, null); } }
MyActivity.java, donde llamo a fetchAllLocalLogins
public class MyActivity extends Activity { /** Called when the activity is first created. */ private GoingOutDbAdapter mDbHelper; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mDbHelper = new GoingOutDbAdapter(this); setContentView(R.layout.main); Cursor localLogin = mDbHelper.fetchAllLocalLogins(); } }
- La restricción de Android Room FOREIGN KEY falló
- Android - SQLite ContentResolver insertar / eliminar / actualizar en UI Thread?
- Cambiar el nombre de la tabla en sqlite
- Base de datos externa de Android en la carpeta de activos
- Android SQLite select * de la tabla donde nombre como% key% usando instrucciones preparadas
- Consulta SQLite desde varias tablas utilizando SQLiteDatabase
- ¿Cuándo cerrar la conexión db en android? Cada vez que finaliza tu operación o después de salir de la aplicación
- Límites de la base de datos SQLite en Android
Es probable que desee llamar al método open()
antes de realizar la consulta:
//... mDbHelper.open(); //whitout this call mdb will be NULL Cursor localLogin = mDbHelper.fetchAllLocalLogins();
Debe abrir la base de datos antes de realizar la operación de base de datos. MDbHelper.open ();