public class CursorJoinerActivity extends Activity {
ListView listView;
ContentResolver contentResolver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.listview_layout);
contentResolver = getContentResolver();
listView = (ListView) findViewById(R.id.listFav);
operateContentResolver();
// listView.setAdapter(adapter);
}
// 操作ContentResolver
public void operateContentResolver() {
StringBuilder sb = new StringBuilder();
// 1) prepare cursors
Cursor contactsCursor = contentResolver.query(
ContactsContract.Contacts.CONTENT_URI, new String[] {
ContactsContract.Contacts._ID,
ContactsContract.Contacts.DISPLAY_NAME, }, null, null,
ContactsContract.Contacts._ID);
Cursor phoneCursor = contentResolver.query(
ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
new String[] { ContactsContract.CommonDataKinds.Phone._ID,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID,
ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,
ContactsContract.CommonDataKinds.Phone.NUMBER }, null,
null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID);
CursorJoiner joiner = new CursorJoiner(
contactsCursor,
new String[] { ContactsContract.Contacts._ID },
phoneCursor,
new String[] { ContactsContract.CommonDataKinds.Phone.CONTACT_ID });
MatrixCursor cursor = new MatrixCursor(new String[] {"_id", "display_name",
"phoneNumber" }, 10);
for (CursorJoiner.Result joinerResult : joiner) {
switch (joinerResult) {
case BOTH: // handle case where a row
String id = phoneCursor.getString(phoneCursor
.getColumnIndex("contact_id"));
String name = contactsCursor.getString(contactsCursor
.getColumnIndex("display_name"));
String phoneNumber = phoneCursor.getString(phoneCursor
.getColumnIndex("data1"));
cursor.addRow(new String[] {id, name, phoneNumber });
break;
}
}
//使用simpleCursorAdapter 装载数据
try {
startManagingCursor(cursor);
SimpleCursorAdapter listAdapter = new SimpleCursorAdapter(this,
R.layout.contact, cursor, new String[] { "_id",
"display_name", "phoneNumber" }, new int[] {R.id.contactId,
R.id.displayName, R.id.phoneNumber });
listView.setAdapter(listAdapter);
} catch (Exception e) {
e.printStackTrace();
}
}
}
通过联系人中的contacts表和phone表,获得一个联系人对应的电话号码
效果图如下: