i had the same problem in my application while loading more than 500 songs from android media store.
closing the cursor will not solve your problem.
you should use AsyncTask..
inside doInBackground method write the code for retrieving values from cursor.
public class CursorLoader extends AsyncTask {
@Override
protected Void doInBackground(Void... params) {
String query = "select serial from tbl1 union select serial from tbl2 union select serial from tbl3";
SQLiteDatabase db = null;
Cursor cur = null;
try {
SettingsDatabaseHelper dal = new SettingsDatabaseHelper(
c);
db = dal.getReadableDatabase();
cur = db.rawQuery(query, null);
int numRows = cur.getCount();
if (numRows > 0) {
cur.moveToFirst();
int serialIdx = cur.getColumnIndexOrThrow("serial");
for (boolean hasItem = cur.moveToFirst(); hasItem; hasItem = cur
.moveToNext()) {
String serial = cur.getString(serialIdx);
if (Validator.getInstance().isValidSerial(serial))
serials.add(serial);
}
}
} finally {
if (cur != null)
cur.close();
if (db != null)
db.close();
}
return null;
}
@Override
protected void onPreExecute() {
}
@Override
protected void onPostExecute(Void result) {
}