0

私はアンドロイド 2.1 プラットフォームを使用しています。私が持っているコードは、エミュレータの連絡先リストからすべての人の名前番号と電子メール ID を表示します。このコードを使用して、上記の要件を取得します。さらに 2 つの連絡先 (たとえば C と D) を作成しました。しかし、問題は

問題 1. email ではなく名前と番号を持つ新しい連絡先を作成すると、この連絡先は連絡先からの 電子メール IDを取得します。たとえば、C にはメール ID がなく、D にはメール ID がある名前を作成した場合、D は既にエミュレーターにある連絡先です。 C は D のメール ID を取得します。C と D は同じメール ID を持っています。

問題 2.番号ではなく email という名前の新しい連絡先を再度作成すると、この連絡 先は以前に作成した連絡先から番号を取得します。たとえば、名前 E を作成した場合、番号はありませんが、連絡先 C の番号が使用されるため、C と E は同じ番号になります。

私はこのコードを使用しています

public class GetAllDatas extends Activity {

ListView lvItem;
private Button btnAdd;
String displayName="", emailAddress="", 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.lvitems); 
    btnAdd = (Button)this.findViewById(R.id.btnAddItem);

    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 = 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 = 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 = pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                break;  
            } 
            pCur.close();
        }


        //  To display the Details
        contactlist.add(displayName+", "+phoneNumber+", "+ emailAddress+"\n");
        itemAdapter.notifyDataSetChanged();
    }
    Collections.sort(contactlist);
    cursor.close(); 
}
}

この問題を解決するにはどうすればよいですか?

4

2 に答える 2

2

私はあなたの質問を理解しています..

参照変数に新しい項目を追加する前に、前のものを消去するだけです..のように、

emailAddress = "" ; 
displayName  = "" ;
phoneNumber  = "" ; 

連絡先情報を取得してリストに追加するためのwhileループで..

private void readContacts()
{
    ContentResolver cr =getContentResolver();
    Cursor cursor = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
    while (cursor.moveToNext()) 
    {
        emailAddress = "" ;
        displayName  = "" ;
        phoneNumber  = "" ;

        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 = 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 = pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                break;  
            } 
            pCur.close();
        }   

        //  To display the Details
        contactlist.add(displayName+", "+phoneNumber+", "+ emailAddress+"\n");          
    }
    Collections.sort(contactlist);
    itemAdapter.notifyDataSetChanged();
    cursor.close(); 
}
于 2012-06-15T09:54:28.373 に答える
0

これを試してみてください.........。

         public void readContacts(){
    ContentResolver cr = getContentResolver();
    Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI,
           null, null, null, null);

    contactName=new String[cur.getCount()];
   contactNumber=new String[cur.getCount()][];
   contactEmail=new String[cur.getCount()][];
   int i=0;
    if (cur.getCount() > 0) {
       while (cur.moveToNext()) {
           String id = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID));
           String name = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
           contactName[i]=name;
           Log.e("Contact Name",contactName[i]);
           if (Integer.parseInt(cur.getString(cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) {


               // get the phone number
               Cursor pCur = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,
                                      ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = ?",
                                      new String[]{id}, null);
               contactNumber[i]=new String[pCur.getCount()];
               int j=0;
               while (pCur.moveToNext()) {
                     String phone = pCur.getString(
                            pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));

                contactNumber[i][j]=phone;
                Log.d("Contact number",contactNumber[i][j]);
                j++;
               }
               pCur.close();
           }
               // get email and type

              Cursor emailCur = cr.query(
                       ContactsContract.CommonDataKinds.Email.CONTENT_URI,
                       null,
                       ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = ?",
                       new String[]{id}, null);
              contactEmail[i]=new String[emailCur.getCount()];
              int k=0;
               while (emailCur.moveToNext()) {

                   String email = emailCur.getString(
                                 emailCur.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));
                   String emailType = emailCur.getString(
                                 emailCur.getColumnIndex(ContactsContract.CommonDataKinds.Email.TYPE));

                contactEmail[i][k]=email;
                Log.v("Contact email",contactEmail[i][k]);
                k++;
               }
               emailCur.close();


           }
       } i++;
  }
于 2012-06-15T10:07:54.600 に答える