Estoy programando una aplicación de Android que debe usar una base de datos para almacenar datos y leer de ellos. Usando this tutorial (on archive.org) obtuve la aplicación para crear una base de datos y soy capaz de crear nuevas entradas, sin embargo, no sé, cómo leer la base de datos para obtener los datos almacenados en un ListView. Sé que hay muchas preguntas similares en este sitio web, pero parece que ninguna de ellas se aplica a la forma en que funciona la base de datos del tutorial.Android: Usando SimpleCursorAdapter para obtener datos de la base de datos en ListView
Código:
import java.util.Calendar;
import maturarbeit.nicola_pfister.studenttools.database.DBAdapter;
import android.app.AlertDialog.Builder;
import android.app.ListActivity;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.database.Cursor;
import android.os.Bundle;
import android.support.v4.widget.SimpleCursorAdapter;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.widget.ListView;
public class Marks extends ListActivity {
DBAdapter db = new DBAdapter(this);
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.marks);
}
@Override
protected void onPause() {
super.onPause();
db.close();
}
@Override
protected void onResume() {
super.onResume();
db.open();
getData();
}
@SuppressWarnings("deprecation")
private void getData() {
SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,
android.R.layout.simple_list_item_1,
db.getAllMarks(),
new String[] { "value" },
new int[] { android.R.id.text1 });
ListView listView = (ListView) findViewById(R.id.marks_list);
listView.setAdapter(adapter);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.marks, menu);
return true;
}
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_add:
Calendar cal = Calendar.getInstance();
int day = cal.get(Calendar.DAY_OF_MONTH);
int month = cal.get(Calendar.MONTH);
final String date = day + "." + month;
Builder builder = new Builder(this);
builder
.setTitle(R.string.dialog_addmarks)
.setItems(R.array.markslist, new OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
@SuppressWarnings("unused")
long id;
String selection = getResources().getStringArray(R.array.markslist)[which];
id = db.insertMark(date, "Default", selection);
}
})
.show();
getData();
break;
case R.id.menu_delete:
//Deleting function yet to be implemented.
break;
}
return super.onOptionsItemSelected(item);
}
}
Editar: El ID de ListView que estaba mal, ya que tenía que ser android: lista.
Gracias. Creo que entiendo, lo que estás tratando de explicar. Usé tu adaptador, pero sigo recibiendo una excepción que bloquea mi aplicación. Supongo que el error está en otro lugar entonces? – BlueHazard
Copie y pegue el LogCat (use el enlace de edición en la parte inferior izquierda de su pregunta). Le daré un vistazo. Etiquetarme en un comentario (con "@Sam") cuando haya hecho esto. – Sam
He agregado el LogCat a mi pregunta. Gracias por ayudarme. – BlueHazard