I have some code which executes two queries against a database and returns two cursor objects. Is there any way that I can combine these two cursors so that all the ListView
gets the data from both?
Asked
Active
Viewed 1.2k times
16
4 Answers
14
There's MergeCursor for that (if there's no way to join tables).
-
I think there is a way to join tables using SQLiteQueryBuilder setTables (String inTables) methods, I myself is going to try it – 2cupsOfTech May 29 '12 at 11:08
9
FYI - An example of using MergeCursor()
c = Cursor containing Contacts columns from Contacts.CONTENT_URI
private Cursor mergeCursorSubset(Cursor c) {
int userMobile = ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE,
workMobile = ContactsContract.CommonDataKinds.Phone.TYPE_WORK_MOBILE;
String storedNumber = ContactsContract.CommonDataKinds.Phone.NUMBER,
displayName =ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,
numberType = ContactsContract.CommonDataKinds.Phone.TYPE,
contactKey = ContactsContract.CommonDataKinds.Phone.LOOKUP_KEY,
whereClausePre = contactKey+" = '",
whereClausePost = "AND ("+numberType+" = '"+userMobile+"' OR "+numberType+" = '"+workMobile+"'";
Uri lookupUri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;;
Cursor [] m = new Cursor[c.getCount()];
if (c.moveToFirst())
for (int k = 0; k<c.getCount();k++){
//Find the mobile numbers
Cursor u = this.getContentResolver().query(lookupUri,
new String[]{displayName, storedNumber, numberType}
, whereClausePre+c.getString(c.getColumnIndex(Contacts.LOOKUP_KEY))+"') "
+ whereClausePost, null, null);
int i = 0;
if (u.moveToFirst())
m[i++] = u;
} //for Each key
return new MergeCursor(m);
}

TheSolarSheriff
- 129
- 2
- 2
4
You can also use cwac-merge.
cwac-merge: Provides the MergeAdapter, a ListAdapter that blends multiple Views or ListAdapters into a single ListAdapter. Use this for section headings, blending multiple sources of data together, etc.

Macarse
- 91,829
- 44
- 175
- 230
1
Check out MatrixCursor.
Maybe this will help you also Android - Database Table Join

Pentium10
- 204,586
- 122
- 423
- 502