Class level:
Uri uri;
String[] projection;
String where;
String[] selectionArgs;
onCreate: (Note clause exists for records with birthdays)
uri = ContactsContract.Data.CONTENT_URI; // Set the URI for Query of Contacts database
//==================================================================
//Projection String Array (Fields we are interested in capturing)
//==================================================================
projection = new String[] { ContactsContract.Contacts.DISPLAY_NAME,
ContactsContract.CommonDataKinds.Phone.NUMBER,
ContactsContract.CommonDataKinds.Event.CONTACT_ID,
ContactsContract.CommonDataKinds.Event.START_DATE,
ContactsContract.CommonDataKinds.Email.DATA,
ContactsContract.Contacts.HAS_PHONE_NUMBER,
ContactsContract.CommonDataKinds.Phone.NUMBER
};
//==================================================================
//Where Clause for the Database Query
//==================================================================
where = ContactsContract.Data.MIMETYPE + "= ? AND "
+ ContactsContract.CommonDataKinds.Event.TYPE + "="
+ ContactsContract.CommonDataKinds.Event.TYPE_BIRTHDAY;
// Easy? Selection args
selectionArgs = new String[] { ContactsContract.CommonDataKinds.Event.CONTENT_ITEM_TYPE };
getLoaderManager().initLoader(0, null, this); //Loader init
outside onCreate:
@Override
public Loader<Cursor> onCreateLoader(int arg0, Bundle arg1) {
CursorLoader loader = new CursorLoader(this, uri, projection, where,
selectionArgs, null);
return loader;
}
// @SuppressWarnings("unchecked")
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) {
Map<String, List<String>> BD = new HashMap<String, List<String>>();
if(cursor !=null){
while (cursor.moveToNext()) {
List<String> li = new ArrayList<String>();
contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Event.CONTACT_ID));
li.add(contactId);
String displayBirthday = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Event.START_DATE));
//==================================================================
// Handle the curious case of Date without Year
//==================================================================
if(displayBirthday.length()<8){
displayBirthday = displayBirthday.replace("--", "0001-");
}
//==================================================================
String name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
li.add(displayBirthday);
Uri phUri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_URI,String.valueOf(contactId));
String Ur = String.valueOf(phUri);
li.add(Ur);
String DateStr = displayBirthday;
Date d = null;
try {
d = new SimpleDateFormat("yyyy-MM-dd"/*, current*/).parse(DateStr);
} catch (ParseException e) {
e.printStackTrace();
}
java.sql.Date d1 = new java.sql.Date(d.getTime());
BD.put(name, li);
li = null;
}
BD is your Hashmap with records, write it to the DB.