連絡先の詳細にアクセスしようとしていますが、主要な詳細しか取得できません。つまり、Ecliar プラットフォームを使用しています。
このコードを使用して、すべての連絡先の名前、番号、および電子メールID を取得します。しかし、連絡先に 2 つの番号と 2 つの電子メール ID がある場合、プライマリ番号と電子メール IDのみを取得します
私は ListView のようなディスプレイを使用しています
1. 名前 1、番号 1、電子メール ID 1。
2. 名前 1、番号 2、メール ID 2. 最初の人など
3. 名前 2、番号 1、2 人目のメール ID 1 など。このように続きます。
しかし、特定の連絡先の番号 1 と電子メール ID 1 しか取得できません。その連絡先の番号 2 と電子メール ID2 を取得できませんでした。
ループ ロジックを編集しましたが、他のエラーが発生しました。この問題を解決するには?
コード
public class Details extends Activity {
ListView lvItem;
private Button btnAdd;
String emailAddress = "" ;
String displayName = "" ;
String phoneNumber = "" ;
ArrayList<String> contactlist=new ArrayList<String>();
ArrayAdapter<String> itemAdapter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
lvItem = (ListView)this.findViewById(R.id.listview);
btnAdd = (Button)this.findViewById(R.id.btn);
itemAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,contactlist);
lvItem.setAdapter(itemAdapter);
btnAdd.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
readContacts();
}
});
}
private void readContacts()
{
ContentResolver cr =getContentResolver();
Cursor cursor = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
while (cursor.moveToNext())
{
displayName = "" ;
ArrayList<String> phoneNumber = new ArrayList<String>();
ArrayList<String> emailAddress = new ArrayList<String>();
displayName = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
String id = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));
Cursor emails = cr.query(Email.CONTENT_URI,null,Email.CONTACT_ID + " = " + id, null, null);
while (emails.moveToNext())
{
emailAddress.add(emails.getString(emails.getColumnIndex(Email.DATA)));
break;
}
emails.close();
if(Integer.parseInt(cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0)
{
Cursor pCur = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = ?",new String[]{id}, null);
while (pCur.moveToNext())
{
phoneNumber.add(pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)));
break;
}
pCur.close();
}
int phoneNumberCount = phoneNumber.size();
int emailCount = emailAddress.size();
// Add arraylist data to contactlist..
if(phoneNumberCount > emailCount) {
for (int i=0; i<=phoneNumberCount; i++)
{
if(emailCount>i)
{
contactlist.add(displayName + " , " + phoneNumber.get(i) + " , " + emailAddress.get(i)+"\n");
}
else
{
contactlist.add(displayName + " , " + phoneNumber.get(i)+"\n");
}
}
}
else
{
for (int i=0; i<=emailCount; i++)
{
if(phoneNumberCount>i)
{
contactlist.add(displayName+", "+phoneNumber.get(i)+", "+ emailAddress.get(i)+"\n");
}
else
{
contactlist.add(displayName+","+ emailAddress.get(i)+"\n");
}
}
}
}
Collections.sort(contactlist);
itemAdapter.notifyDataSetChanged();
cursor.close();
}
}
解決策はありますか?
LogCat
06-19 11:28:08.058: W/KeyCharacterMap(265): No keyboard for id 0
06-19 11:28:08.068: W/KeyCharacterMap(265): Using default keymap: /system/usr/keychars/qwerty.kcm.bin
06-19 11:28:33.187: D/dalvikvm(265): GREF has increased to 201
06-19 11:33:32.118: W/KeyCharacterMap(307): No keyboard for id 0
06-19 11:33:32.118: W/KeyCharacterMap(307): Using default keymap: /system/usr/keychars/qwerty.kcm.bin
06-19 14:16:35.488: D/AndroidRuntime(385): Shutting down VM
06-19 14:16:35.498: W/dalvikvm(385): threadid=3: thread exiting with uncaught exception (group=0x4001b188)
06-19 14:16:35.498: E/AndroidRuntime(385): Uncaught handler: thread main exiting due to uncaught exception
06-19 14:16:35.507: E/AndroidRuntime(385): java.lang.IndexOutOfBoundsException: Invalid location 1, size is 1
06-19 14:16:35.507: E/AndroidRuntime(385): at java.util.ArrayList.get(ArrayList.java:341)
06-19 14:16:35.507: E/AndroidRuntime(385): at com.abhi.Trial3.readContacts(Trial3.java:100)
06-19 14:16:35.507: E/AndroidRuntime(385): at com.abhi.Trial3.access$0(Trial3.java:44)
06-19 14:16:35.507: E/AndroidRuntime(385): at com.abhi.Trial3$1.onClick(Trial3.java:38)
06-19 14:16:35.507: E/AndroidRuntime(385): at android.view.View.performClick(View.java:2364)
06-19 14:16:35.507: E/AndroidRuntime(385): at android.view.View.onTouchEvent(View.java:4179)
06-19 14:16:35.507: E/AndroidRuntime(385): at android.widget.TextView.onTouchEvent(TextView.java:6541)