title: Close was never explicitly called on Database
body: <p>I have a listview that is sourced by an sqlite db. I call fillData() at several different points to update the listview.</p>
  
  <pre><code>private void fillData() {
      readDatabase.open();
      Cursor itemsCursor = readDatabase.fetchAllItems();
  
  
      startManagingCursor(itemsCursor);
  
      String[] from = new String[] { DatabaseHandler.KEY_ITEM,
              DatabaseHandler.KEY_UNITCOST, DatabaseHandler.KEY_QUANTITY,
              DatabaseHandler.KEY_TOTAL };
  
      int[] to = new int[] { R.id.itemtext, R.id.costtext, R.id.quantitytext,
              R.id.totaltext };
  
      SimpleCursorAdapter items = new SimpleCursorAdapter(this,
              R.layout.rowincart, itemsCursor, from, to);
  
      setListAdapter(items);
      }
  </code></pre>
  
  <p><strong>Whole code of class is added here</strong></p>
  
  <pre><code>public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      this.setContentView(R.layout.cartactivity);
      readDatabase = new DatabaseHandler(this);
  //  readDatabase.open();
      loadwidget();
      fillData();
      ListView lv = getListView();
      this.registerForContextMenu(lv);
  
  }
  
  private void loadwidget() {
      Bundle extras = getIntent().getExtras();
      cost = extras.getInt("Cost");
      quantity = extras.getInt("quantity");
      product = extras.getString("product");
      Log.i("Hello Testing", cost + " and " + quantity + "   " + product);
  
  }
  
  @SuppressWarnings("deprecation")
  private void fillData() {
      readDatabase.open();
      itemsCursor = readDatabase.fetchAllItems();
  
  
      startManagingCursor(itemsCursor);
  
      String[] from = new String[] { DatabaseHandler.KEY_ITEM,
              DatabaseHandler.KEY_UNITCOST, DatabaseHandler.KEY_QUANTITY,
              DatabaseHandler.KEY_TOTAL };
  
      int[] to = new int[] { R.id.itemtext, R.id.costtext, R.id.quantitytext,
              R.id.totaltext };
  
      SimpleCursorAdapter items = new SimpleCursorAdapter(this,
              R.layout.rowincart, itemsCursor, from, to);
  
      setListAdapter(items);
  
      }
  
  
  @Override
  protected void onDestroy() {
      super.onDestroy();
      itemsCursor.close();
      readDatabase.close();
  }
  
  @Override
  public void onCreateContextMenu(ContextMenu menu, View v,
          ContextMenuInfo menuInfo) {
      super.onCreateContextMenu(menu, v, menuInfo);
  
      menu.setHeaderTitle("SMARTAWAY");
  
      menu.add(0, DELETE_ID, 1, "Delete Item");
  
      menu.add(0, UPDATE_ID, 1, "Change Quantity");
  }
  
  public boolean onContextItemSelected(MenuItem item) {
      switch (item.getItemId()) {
      case DELETE_ID:
          AdapterContextMenuInfo info = (AdapterContextMenuInfo) item
                  .getMenuInfo();
          readDatabase.deleteItem(info.id);
          fillData();
          return true;
      case UPDATE_ID:
  
          final AdapterContextMenuInfo info1 = (AdapterContextMenuInfo) item
                  .getMenuInfo();
          final Dialog dialog = new Dialog(Cartactivity.this);
          dialog.setContentView(R.layout.dialog);
          final EditText edit0 = (EditText) dialog
                  .findViewById(R.id.quantity);
          edit0.setText(String.valueOf(Quantity));
          Button ok = (Button) dialog.findViewById(R.id.ok);
          dialog.setTitle("          Add More Items          ");
          dialog.setCancelable(true);
          Button inc = (Button) dialog.findViewById(R.id.inc);
          inc.setOnClickListener(new OnClickListener() {
  
              @Override
              public void onClick(View v) {
                  // TODO Auto-generated method stub
                  int c = Integer.parseInt(Quantity);
                  c = c + 1;
                  Quantity = String.valueOf(c);
                  edit0.setText(Quantity);
  
              }
          });
          Button dec = (Button) dialog.findViewById(R.id.dec);
          dec.setOnClickListener(new OnClickListener() {
  
              @Override
              public void onClick(View v) {
                  // TODO Auto-generated method stub
                  int c = Integer.parseInt(Quantity);
                  c = c - 1;
                  Quantity = String.valueOf(c);
                  edit0.setText(Quantity);
              }
          });
          ok.setOnClickListener(new OnClickListener() {
  
              public void onClick(View v) {
  
                  row1 = info1.id; 
                  flag = 1;
                  int b = Integer.parseInt(Quantity);
                  int total = cost * b;
                  _total = String.valueOf(total);
                  _cost = String.valueOf(cost);
                  _quantity = String.valueOf(b);
                  _item = product;
  
                  Log.i(row1+" id"+_total +" total"+ _cost +" cost"+ _quantity+" quant", "Hello updated database");
  
                  readDatabase.updateItem(row1, _item, _cost, _quantity, _total);
  
                  fillData();
  
                  dialog.dismiss();
  
              }
          });
          Button cancel = (Button) dialog.findViewById(R.id.cancel);
          cancel.setOnClickListener(new OnClickListener() {
  
              @Override
              public void onClick(View v) {
                  // TODO Auto-generated method stub
              dialog.dismiss();   
              }
          });
          dialog.show();
  
          return true;
      }
  
      return super.onContextItemSelected(item);
  }
  
  @Override
  protected void onListItemClick(ListView l, View v, int position, long thisID) {
      super.onListItemClick(l, v, position, thisID);
  
      l.showContextMenuForChild(v);
  
      Cursor cursor = (Cursor) getListAdapter().getItem(position);
      Quantity = cursor.getString(cursor
              .getColumnIndex(DatabaseHandler.KEY_QUANTITY));
      /*Total = cursor.getString(cursor
              .getColumnIndex(DatabaseHandler.KEY_TOTAL));*/
  
  }
  </code></pre>
  
  <p>All the things are going good here, but I found some errors in Logcat ie close() were not called explicitly on database something like this. The error doesnt stop my working anywhere but problem looks wierd. I think I have to close cursor but not sure about that. I have closed database on Destroy but not sure about cursor. Please help.</p>
  
  <p>Same problem is mentioned <a href="https://stackoverflow.com/questions/5707713/close-was-never-explicitly-called">here</a> but didnt get the actual solution</p>
  
  <p><strong>Thanks in Advance</strong> </p>