UPDATE3
Here I am getting all contacts of user phone and whatsapp number. after successfully retrieving I am getting IndexOutOfBoundsException.
Code
Map<String, String> namePhoneMap = new HashMap<String, String>();
Cursor phones = getContentResolver()
.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
null, null, null, null);
// Loop Through All The Numbers
while (phones.moveToNext()) {
String name = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
String phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
// Cleanup the phone number
phoneNumber = phoneNumber.replaceAll("[()\\s-]+", "");
// Enter Into Hash Map
namePhoneMap.put(phoneNumber, name);
}
for (Map.Entry<String, String> entry : namePhoneMap.entrySet()) {
String key = entry.getKey();
Log.d("Login", "Phone :" + key);
String value = entry.getValue();
Log.d("Login", "Name :" + value);
phoneContacts.add(key);
nameContacts.add(value);
}
phones.close();
//ArrayList for Store Whatsapp Contact
Map<String, String> whatsappMap = new HashMap<String, String>();
final String[] projection = {
ContactsContract.Data.CONTACT_ID,
ContactsContract.Data.DISPLAY_NAME,
ContactsContract.Data.MIMETYPE,
"account_type",
ContactsContract.Data.DATA3,
};
final String selection = ContactsContract.Data.MIMETYPE + " =? and account_type=?";
final String[] selectionArgs = {
"vnd.android.cursor.item/vnd.com.whatsapp.profile",
"com.whatsapp"
};
ContentResolver cr = getContentResolver();
Cursor c = cr.query(
ContactsContract.Data.CONTENT_URI,
projection,
selection,
selectionArgs,
null);
while (c.moveToNext()) {
String id = c.getString(c.getColumnIndex(ContactsContract.Data.CONTACT_ID));
String number = c.getString(c.getColumnIndex(ContactsContract.Data.DATA3));
String name = c.getString(c.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
Log.d(TAG, "name " +name + " - number - "+number);
whatsappMap.put(name, number);
}
Log.d(TAG, "Total WhatsApp Contacts: " + c.getCount());
for (Map.Entry<String, String> entryWhatsapp : whatsappMap.entrySet()) {
String key = entryWhatsapp.getKey();
Log.d(TAG, "PhoneWhatsApp :" + key);
String value = entryWhatsapp.getValue();
Log.d(TAG, "NameWhatsApp :" + value);
myWhatsappContacts.add(value);
}
c.close();
Till Now my code is working very well. Now I am adding a code of adding three array in excel file.
String csv = (Environment.getExternalStorageDirectory().getAbsolutePath() + "/SendingContactList2.csv"); // Here csv file name is MyCsvFile.csv
Log.d("Login3", csv);
CSVWriter writer = null;
try {
writer = new CSVWriter(new FileWriter(csv));
List<String[]> data = new ArrayList<String[]>();
// data.add(new String[]{"number","name"});
for (int i = 0; i < phoneContacts.size(); i++){
//
if (Integer.parseInt(String.valueOf(phoneContacts.get(i).length())) < 10) {
Log.d("Login34", String.valueOf(phoneContacts.get(i).length()));
phoneContacts.remove(i);
nameContacts.remove(i);
} else {
data.add(new String[]{phoneContacts.get(i),nameContacts.get(i)});// Line no 1
// data.add(new String[]{phoneContacts.get(i),nameContacts.get(i),myWhatsappContacts.get(i)}); // Line no 2
}
}
writer.writeAll(data); // data is adding to csv
writer.close();
// callRead();
} catch (IOException e) {
e.printStackTrace();
}
Now when I run Line 1 code and when I run Line 2 It gives me Index out of bound exception.