1

我能够从联系人列表中获取所有联系人(电话号码和电子邮件) 但取回所有联系人需要很长时间。 为了加快速度,我在应用程序中保存了一次。但是现在我无法获得更新的联系人。他们如何与我的应用程序同步?Android的联系人

当我尝试在列表中显示它们时出现问题,因为电话号码和电子邮件的用户数据库超过了2000.我目前正在使用基础适配器实现此目的。 有人可以帮我解决大型联系人数据库吗?

像GroupMe n Viber这样的应用程序非常快速地显示所有的用户联系人有人可以告诉我一个简单的解释来实现它。

String KEY_NAME = "Name"; 
    String KEY_NO = "No"; 

    String selection = ContactsContract.CommonDataKinds.Phone.IN_VISIBLE_GROUP + " = 1"; 
    String sortOrder = ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME + " COLLATE LOCALIZED ASC"; 

    String data=""; 
    String name=""; 
    ContactEntry contactObj; 
    String id; 
    String index=""; 


    final String[] projection = new String[]{ContactsContract.Contacts._ID , ContactsContract.Contacts.DISPLAY_NAME , ContactsContract.Contacts.HAS_PHONE_NUMBER}; 

    final String[] email_projection = new String[] {ContactsContract.CommonDataKinds.Email.DATA , ContactsContract.CommonDataKinds.Email.TYPE}; 

    final String[] phone_projection = new String[] {ContactsContract.CommonDataKinds.Phone.NUMBER, ContactsContract.CommonDataKinds.Phone.TYPE}; 

    ContentResolver cr = context.getContentResolver(); 
    Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI , projection , selection , null , sortOrder); 

    if(cur.getCount()>0){ 

     while(cur.moveToNext()){ 

      id = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID)); 
      name = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); 

      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 , phone_projection , 
             ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = ?",new String[]{id}, null); 


       while (pCur.moveToNext()){ 

         data = pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 

         if(!temp.contains(data) && !data.equals(null)){ 
          //Adding PhoneNumbers in List 
         } 
       } 
        pCur.close(); 
      } 

      Cursor emailCur = cr.query(ContactsContract.CommonDataKinds.Email.CONTENT_URI, email_projection, 
             ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = ?", new String[]{id}, null); 


      while (emailCur.moveToNext()){ 

       data = emailCur.getString(emailCur.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA)); 

       if(!temp.contains(data) && !data.equals(null)){ 
            //Adding Email in List 
       } 
      } 
      emailCur.close(); 
     } 
    } 

我用上面的代码 我怎样才能通过光标在CurosrAdaper所有电子邮件和PHONENUMBERS。 请帮我,我没有找到任何解决方案。

+0

你使用投影时取出由FON数据的基础上的联系人? – picaso 2012-02-03 12:50:10

回答

0

我认为你需要有一个服务(或)异步任务类似的东西,定期更新从手机到你的本地应用程序的联系人。否则,你无法同步。

+0

嗨,这将是非常昂贵的,而不是我认为每次当应用程序开始刷新它的联系人或重新加载联系人,而不是存储them.please建议一种方式为显示他们在我的上述代码列表中。 – Khushwant 2012-02-03 13:56:34

1

我也同样的问题,我已经使用ResourceCursorAdapter其作为快速获取联系人的联系人API在Android ....

+0

如何将ResourceCursorAdapter用于所有PhoneNumbers和Email的Qurey,请参阅上面的代码。 – Khushwant 2012-02-03 13:46:20