访问数据不合适?

时间:2012-06-15 09:49:13

标签: android

我正在使用android 2.1平台。我的代码将显示模拟器联系人列表中所有人的姓名和电子邮件ID,通过使用此代码,我将获得上述要求。我有一些联系人我的模拟器,我创建了两个联系人(比如C和D)。但问题是

问题1。如果我创建的新联系人姓名和号码不是电子邮件,此联系人将从联系人处获取电子邮件ID 如果我创建名称C没有电子邮件ID但D有电子邮件ID,D是已经在模拟器中的联系人。例如: C将使用D的电子邮件ID .C和D具有相同的电子邮件ID。

问题2. 如果我再次创建一个新的联系人命名电子邮件但不是号码,此联系人将从联系人处获取号码我以前创建。例如:如果我创建了名称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(); 
}
}

我该如何解决这个问题?

2 个答案:

答案 0 :(得分: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(); 
}

答案 1 :(得分: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++;
  }