¿Cómo puedo recuperar datos de la base de datos con el cursor? (Android, SQLite)

Estoy atascado. No puedo averiguar qué hago mal, así que por favor ayude a cualquiera. Aunque es una tarea bastante sencilla, no entiendo cómo se ve realmente la base de datos.

Aquí está el código que utilizo para insertar datos en la tabla en la base de datos:

EditText title = (EditText)findViewById(R.id.Title); String Title = title.getText().toString(); EditText d = (EditText)findViewById(R.id.director); String Director = d.getText().toString(); SQLiteDatabase db = openOrCreateDatabase("Films", MODE_PRIVATE, null); db.execSQL("CREATE TABLE IF NOT EXISTS MyFilms (idFilm INTEGER PRIMARY KEY AUTOINCREMENT, Title VARCHAR, Director VARCHAR, Year INTEGER, Rating INTEGER);"); db.execSQL("INSERT INTO MyFilms (Title) VALUES('" + Title + "');"); db.execSQL("INSERT INTO MyFilms (Director) VALUES('" + Director + "');"); db.close(); 

¿Este código me da una tabla con las columnas idfilm , Title , Director , Year , Rating ? Si es así, todavía hay un problema cuando intento recuperar todos los títulos de la columna Title usando este código:

 SQLiteDatabase db = openOrCreateDatabase("Films", MODE_PRIVATE, null); Cursor c = db.rawQuery("SELECT * FROM MyFilms",null); c.moveToFirst(); while (c.isAfterLast() == false) { String Title = c.getString(c.getColumnIndex("Director")); stringList.add(Title); //This I use to create listlayout dynamically and show all the Titles in it c.moveToNext(); } 

El registro de errores:

 05-21 17:50:14.666: E/AndroidRuntime(27045): FATAL EXCEPTION: main 05-21 17:50:14.666: E/AndroidRuntime(27045): java.lang.NullPointerException 05-21 17:50:14.666: E/AndroidRuntime(27045): at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:355) 05-21 17:50:14.666: E/AndroidRuntime(27045): at android.widget.ArrayAdapter.getView(ArrayAdapter.java:323) 05-21 17:50:14.666: E/AndroidRuntime(27045): at android.widget.AbsListView.obtainView(AbsListView.java:1409) 05-21 17:50:14.666: E/AndroidRuntime(27045): at android.widget.ListView.measureHeightOfChildren(ListView.java:1216) 05-21 17:50:14.666: E/AndroidRuntime(27045): at android.widget.ListView.onMeasure(ListView.java:1127) 05-21 17:50:14.666: E/AndroidRuntime(27045): at android.view.View.measure(View.java:8313) 05-21 17:50:14.666: E/AndroidRuntime(27045): at android.widget.RelativeLayout.measureChild(RelativeLayout.java:566) 05-21 17:50:14.666: E/AndroidRuntime(27045): at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:381) 05-21 17:50:14.666: E/AndroidRuntime(27045): at android.view.View.measure(View.java:8313) 05-21 17:50:14.666: E/AndroidRuntime(27045): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138) 05-21 17:50:14.666: E/AndroidRuntime(27045): at android.widget.FrameLayout.onMeasure(FrameLayout.java:250) 05-21 17:50:14.666: E/AndroidRuntime(27045): at android.view.View.measure(View.java:8313) 05-21 17:50:14.666: E/AndroidRuntime(27045): at android.widget.LinearLayout.measureVertical(LinearLayout.java:531) 05-21 17:50:14.666: E/AndroidRuntime(27045): at android.widget.LinearLayout.onMeasure(LinearLayout.java:309) 05-21 17:50:14.666: E/AndroidRuntime(27045): at android.view.View.measure(View.java:8313) 05-21 17:50:14.666: E/AndroidRuntime(27045): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138) 05-21 17:50:14.666: E/AndroidRuntime(27045): at android.widget.FrameLayout.onMeasure(FrameLayout.java:250) 05-21 17:50:14.666: E/AndroidRuntime(27045): at android.view.View.measure(View.java:8313) 05-21 17:50:14.666: E/AndroidRuntime(27045): at android.view.ViewRoot.performTraversals(ViewRoot.java:839) 05-21 17:50:14.666: E/AndroidRuntime(27045): at android.view.ViewRoot.handleMessage(ViewRoot.java:1859) 05-21 17:50:14.666: E/AndroidRuntime(27045): at android.os.Handler.dispatchMessage(Handler.java:99) 05-21 17:50:14.666: E/AndroidRuntime(27045): at android.os.Looper.loop(Looper.java:123) 05-21 17:50:14.666: E/AndroidRuntime(27045): at android.app.ActivityThread.main(ActivityThread.java:3683) 05-21 17:50:14.666: E/AndroidRuntime(27045): at java.lang.reflect.Method.invokeNative(Native Method) 05-21 17:50:14.666: E/AndroidRuntime(27045): at java.lang.reflect.Method.invoke(Method.java:507) 05-21 17:50:14.666: E/AndroidRuntime(27045): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 05-21 17:50:14.666: E/AndroidRuntime(27045): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 05-21 17:50:14.666: E/AndroidRuntime(27045): at dalvik.system.NativeStart.main(Native Method) 

¿Por qué DDMS arroja NullPointerException? ¿Cómo debo obtener los datos de "Título"? Intenté usar c.getString (), pero cuando pido c.getString (1) todavía hay NullPointerException aunque devuelve "Director" cuando configuro c.getString (2). ¡Por favor ayuda!

Su problema ocurre cuando rellena la base de datos (su primer segmento de código).

Es necesario combinar las INSERT :

 db.execSQL("INSERT INTO MyFilms (Title, Director, Year) VALUES('" + title + "','" + director + "'," + year + ");"); 

De lo contrario, terminará con filas que contengan un valor nulo para Title o Director .

( Nota: No utilice la notación de SQL anterior, ya que puede dejarlo vulnerable a la inyección de SQL.Lo escribí de esta manera por razones de simplicidad.En el código de producción, debe utilizar parámetros o desinfectar sus valores. convertirse en una víctima de Little Bobby Tables ).

EDITAR

Aquí hay algunos hilos sobre declaraciones preparadas:

  • ¿Cómo utilizo las sentencias preparadas en SQlite en Android?
  • ¿Consultas con declaraciones preparadas en Android?

si sus valores correctamente insertados del cuadro de edittext. entonces siga estos pasos. Recuperar valores

 Cursor c = db.rawQuery("SELECT * FROM MyFilms",null); if (c != null ) { if (c.moveToFirst()) { do { String dir = c.getString(c.getColumnIndex("Director")); test.add("" + dir ); }while (c.moveToNext()); } } 

Mostrar los valores como una lista

  this.setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,test)); 

La sentencia lo muestra como una lista cuando la clase extiende una ListActivity.

Utilice este código.

 c.moveToFirst(); if (c != null) { do { for (int i = 0; i < c.getColumnCount(); i++) { Log.e("", "" + c.getString(i)); } }while (c.moveToNext()); } 
  • Sqlite Seleccione Query con rawQuery en Android
  • Cómo obtener entradas nulas de sqlite en android
  • Datos de exportación de Android a csv
  • declaración no válida en fillwindow () en Android
  • Cómo persistir el permiso en android API 19 (KitKat)?
  • Obtener boolean de la base de datos utilizando Android y SQLite
  • Error de actualización de filestream de Android Sqlite singleton db
  • Cómo dividir valores separados por comas en SQLite?
  • ¿Es posible aplicar la clave principal en los campos de texto en la base de datos android
  • Cómo contar la fila de una tabla de base de datos sqlite android
  • Almacenamiento de datos en Android: almacenamiento de archivos vs base de datos SQLite vs preferencias compartidas
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.