title: Android: Using SimpleCursorAdapter to get Data from Database to ListView
body: <p>I am programming an android app that should use a database to store data and read from it. Using <a href="http://web.archive.org/web/20130114103211/http://android10.org/index.php/articlesdatastorage/235-creating-and-using-databases-in-android-one" rel="noreferrer">this tutorial (on archive.org)</a> I got the app to create a database and I'm able to create new entries, however, I don't know, how to read the database to get the stored data in a ListView. I know there are many similar questions on this website but it seems none of them apply to the way, the database from the tutorial works.</p>
  
  <p>Code:</p>
  
  <pre><code>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);
  }
  }
  </code></pre>
  
  <p>Edit: The ListView ID was wrong since it had to be android:list.</p>