1

エミュレーター内のすべての連絡先の連絡先の詳細にアクセスしようとしています。他の詳細にアクセスするための望ましい解決策を取得しました。電話と電子メールの種類にアクセスするときに問題があります。以下のコードを使用して電話の種類と電子メールを取得しました。タイプ。アプリケーションはコンパイルエラーなしで実行されています。

完全なコード

public class GetAllDatas extends Activity {

ListView lvItem;
private Button btnAdd;
String Ptype, Etype;
int contactPhoneType;

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  = "" ;
        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));

        /*                   Email                   */ 

        Cursor emails = cr.query(Email.CONTENT_URI,null,Email.CONTACT_ID + " = " + id, null, null);
        while (emails.moveToNext()) 
        {
            emailAddress.add(emails.getString(emails.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER))); 

             int contactPhoneType = emails.getInt(emails.getColumnIndex(ContactsContract.CommonDataKinds.Email.TYPE));



             switch(contactPhoneType){
                case ContactsContract.CommonDataKinds.Email.TYPE_HOME: 
                     Etype = "Home";
                     break; 
                case ContactsContract.CommonDataKinds.Email.TYPE_WORK: 
                    Etype = "Work";
                    break;
                case ContactsContract.CommonDataKinds.Email.TYPE_MOBILE: 
                    Etype = "Mobile";

                    break;
                case ContactsContract.CommonDataKinds.Email.TYPE_OTHER: 
                    Etype = "Other";
                    break;
           }                  
       }



        emails.close(); 


      /*            Phone Number and Type   */ 

        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))); 

                  contactPhoneType = pCur.getInt(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE));


                 switch(contactPhoneType){
                    case ContactsContract.CommonDataKinds.Phone.TYPE_HOME: 
                         Ptype = "Home";
                         break; 
                    case ContactsContract.CommonDataKinds.Phone.TYPE_WORK: 
                        Ptype = "Work";
                        break; 
                    case ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE:  
                        Ptype = "Mobile";
                        break; 
                    case ContactsContract.CommonDataKinds.Phone.TYPE_OTHER: 
                        Ptype = "Other";
                        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 +  " , " +  Ptype + " , " + phoneNumber.get(i) + " , " + Etype + " , " + emailAddress.get(i) + "\n");    
           }
        else
        {
          contactlist.add(displayName + " , " +  Ptype + " , " + phoneNumber.get(i) + " , " + " , " + "\n");
        } 
       }
    }
    else  
       {
        for (int i=0; i<emailCount; i++) 
         {
        if(phoneNumberCount>i)
          {
            contactlist.add(displayName + " , " + Ptype + " , " + phoneNumber.get(i) + " , " +  Etype + " , " + emailAddress.get(i) + "\n"); 
          }
        else
        { 
          contactlist.add(displayName + " , " + " , " + " , " + Etype + " , " + emailAddress.get(i) +  "\n");
        }
      }
    }      
    }
    Collections.sort(contactlist);
    itemAdapter.notifyDataSetChanged();
    cursor.close(); 
} 
 }

問題は、不適切な順序のListViewに電話タイプと電子メールタイプが含まれていることでした。つまり、特定の連絡先に2つの番号[自宅、モバイル]と2つのメール[自宅、職場]を保存しました。コードを実行すると、この連絡先のListView表示は番号[モバイル、職場]とメール[モバイル、職場]になりました。 ]。コードを修正できません。ListViewを適切に表示する方法。デバッグ方法を知っている人はいますか?

4

1 に答える 1

0

問題はループにあります...各アイテムに1つの変数しかなく、毎回それを再設定しています。

リストビューに追加する文字列を作成する場合、各ループの最後の反復からの値しかありません。

文字列作成の大部分をこれらのループに移動する必要があります。

ループの外側で文字列を開始し、連絡先名を設定してから、電話番号ループを介して各反復で電話番号(およびタイプ)を追加し、eを介して各反復で文字列に電子メール(およびタイプ)を追加します-メールループ。

編集

私はこれがあなたが望むものだと思います:

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

    while (cursor.moveToNext()) {
        displayName = "";

        displayName = cursor
                .getString(cursor
                        .getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
        String id = cursor.getString(cursor
                .getColumnIndex(ContactsContract.Contacts._ID));
        String holder = "";
        holder = holder + displayName;

        /* Phone Number and Type */

        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()) {

                contactPhoneType = pCur
                        .getInt(pCur
                                .getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE));

                switch (contactPhoneType) {
                case ContactsContract.CommonDataKinds.Phone.TYPE_HOME:
                    holder = holder + ", Home";
                    break;
                case ContactsContract.CommonDataKinds.Phone.TYPE_WORK:
                    holder = holder + ", Work";
                    break;
                case ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE:
                    holder = holder + ", Mobile";
                    break;
                case ContactsContract.CommonDataKinds.Phone.TYPE_OTHER:
                    holder = holder + ", Other";
                    break;
                }
                holder = holder
                        + ", "
                        + (pCur.getString(pCur
                                .getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)));
            }
            pCur.close();
        }

        /* Email */
        Cursor emails = cr.query(Email.CONTENT_URI, null, Email.CONTACT_ID
                + " = " + id, null, null);
        while (emails.moveToNext()) {
            int contactPhoneType = emails
                    .getInt(emails
                            .getColumnIndex(ContactsContract.CommonDataKinds.Email.TYPE));
            switch (contactPhoneType) {
            case ContactsContract.CommonDataKinds.Email.TYPE_HOME:
                holder = holder + ", Home";
                break;
            case ContactsContract.CommonDataKinds.Email.TYPE_WORK:
                holder = holder + ", Work";
                break;
            case ContactsContract.CommonDataKinds.Email.TYPE_MOBILE:
                holder = holder + ", Mobile";
                break;
            case ContactsContract.CommonDataKinds.Email.TYPE_OTHER:
                holder = holder + ", Other";
                break;
            }
            holder = holder
                    + ", "
                    + (emails
                            .getString(emails
                                    .getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)));
        }
        emails.close();
        contactlist.add(holder);
    }
    Collections.sort(contactlist);
    itemAdapter.notifyDataSetChanged();
    cursor.close();
}
于 2012-06-28T11:39:55.983 に答える