【问题标题】:Cannot retrieve email from Contacts无法从通讯录中检索电子邮件
【发布时间】:2014-09-08 05:35:45
【问题描述】:

我想从我的电话簿中检索电子邮件、电话号码和联系人姓名并将它们显示在列表视图中。

姓名和号码都发送得很完美但电子邮件无法检索。

以下是相关代码:

public  void getAllContacts(ContentResolver cr) {
          String email="";
            Cursor phones = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,null,null, Phone.DISPLAY_NAME + " ASC");
            //email = new String[phones.getCount()];

            while (phones.moveToNext())
            {
              String id = phones.getString(phones.getColumnIndex(ContactsContract.Contacts._ID));
              String name=phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
              String phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
              System.out.println("name.................."+name+"........number......."+phoneNumber); 

              name1.add(name);
              phno1.add(phoneNumber);

             Cursor emailCur = cr.query(ContactsContract.CommonDataKinds.Email.CONTENT_URI,null,ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = ?", new String[]{id}, null);
             if(emailCur!=null)
             {
                 emailCur.moveToFirst();
             }
            // emailCur.moveToFirst();
              while (emailCur.moveToNext()) { 

                  email = emailCur.getString( emailCur.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));
                  System.out.println(email);
                  } 
                  email1.add(email); 
                  emailCur.close();


            }


            phones.close();

         }

我知道以前有人问过这个问题,但没有一个解决方案对我有用。所以有人能指出我在这里犯的错误吗??

【问题讨论】:

    标签: android android-contacts contactscontract


    【解决方案1】:

    我遇到了同样的问题。我通过更改kgandroid的代码解决了它

    String id = phones.getString(phones.getColumnIndex(ContactsContract.Contacts._ID));
    

    String id = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.CONTACT_ID));
    

    (请注意 ContactsContract.CommonDataKinds.Phone.CONTACT_ID = "contact_id" 而 ContactsContract.Contacts._ID = "_id")

    【讨论】:

      【解决方案2】:

      试试这个代码:

      public  void getAllContacts(ContentResolver cr) {
          String email="";
          // Cursor phones = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,null,null, Phone.DISPLAY_NAME + " ASC");
          Cursor phones = cr.query(ContactsContract.Contacts.CONTENT_URI,null, null, null, Phone.DISPLAY_NAME + " ASC");
          //email = new String[phones.getCount()];
      
           while (phones.moveToNext()){
              String id = phones.getString(phones.getColumnIndex(ContactsContract.Contacts._ID));
              String name=phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
              String phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
              System.out.println("name.................."+name+"........number......."+phoneNumber); 
      
              name1.add(name);
              phno1.add(phoneNumber);
      
              Cursor emailCur = cr.query(ContactsContract.CommonDataKinds.Email.CONTENT_URI,null
              , ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = ?"
              , new String[]{id}, null);
              if(emailCur!=null){
                  emailCur.moveToFirst();
              }
      
              // emailCur.moveToFirst();
              while (emailCur.moveToNext()) { 
                  email = emailCur.getString( emailCur.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));
                  System.out.println(email);
              } 
              email1.add(email); 
              emailCur.close();
          }
          phones.close();
      }
      

      【讨论】:

      • 我已经评论了你的光标初始化行并用我的替换它。
      【解决方案3】:

      试试这个方法,希望能帮助你解决问题。

          public ArrayList<HashMap<String,String>> getAllContacts(ContentResolver cr) {
              ArrayList<HashMap<String,String>> contactList = new ArrayList<HashMap<String, String>>();
              Cursor phones = cr.query(Phone.CONTENT_URI, null,null,null, Phone.DISPLAY_NAME+ " ASC");
      
              while (phones.moveToNext())
              {
                  HashMap<String,String> row = new HashMap<String, String>();
                  String id = phones.getString(phones.getColumnIndex(ContactsContract.Contacts._ID));
                  String name=phones.getString(phones.getColumnIndex(Phone.DISPLAY_NAME));
                  String phoneNumber = phones.getString(phones.getColumnIndex(Phone.NUMBER));
                  System.out.println("name.................."+name+"........number......."+phoneNumber);
      
                  row.put("Name",name);
                  row.put("PhoneNo",phoneNumber);
                  row.put("Email",getEmail(cr,id));
                  contactList.add(row);
              }
      
      
              phones.close();
              return contactList;
          }
      
          private static String getEmail(ContentResolver cr,String contactId) {
              String emailStr = "";
              final String[] projection = new String[]{Email.DATA, Email.TYPE};
      
              final Cursor email = cr.query(Email.CONTENT_URI, projection, ContactsContract.Data.CONTACT_ID + "=?",
                      new String[]{contactId}, null);
      
              if (email.moveToFirst()) {
                  final int contactEmailColumnIndex = email.getColumnIndex(Email.DATA);
      
                  while (!email.isAfterLast()) {
                      emailStr = emailStr + email.getString(contactEmailColumnIndex) + ";";
                      email.moveToNext();
                  }
              }
              email.close();
              return emailStr;
          }
      
      Note : add this <uses-permission android:name="android.permission.READ_CONTACTS"/> in AndroidManifest.xml
      

      【讨论】:

      • 感谢您的回复。我会试试看。
      • 我应该导入哪个“数据”??? final Cursor email = context.getContentResolver().query(Email.CONTENT_URI, projection, Data.CONTACT_ID + "=?"......Eclipse 让我可以选择导入 3 个“数据”类。
      • 尝试导入android.provider.ContactsContract.Data
      • 只检索到 1 个联系人
      • 仍然无法正常工作:/ .... pastebin.com/vSWkyE9P ...这里是 logcat...您可以看到只有 1 封电子邮件正在检索。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-11
      • 1970-01-01
      相关资源
      最近更新 更多