无法获取最后联系人的电话号码

Posted

技术标签:

【中文标题】无法获取最后联系人的电话号码【英文标题】:Cannot get Phone number of last contact 【发布时间】:2013-02-18 06:25:56 【问题描述】:

我一直在遵循this站点的教程,以获取android联系人的电话号码。

我面临的问题是,我似乎无法获得最后一个联系号码。 例如,如果我保存了 3 个联系人,它会显示前 2 个联系人的号码。

如果对任何人有帮助,我也会发布我的代码。

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));
            if(Integer.parseInt(cur.getString(cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER)))>0)
                pCur=getContentResolver().
                        query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, 
                                ContactsContract.CommonDataKinds.Phone._ID+"=?", 
                                new String[]id, null);
                while(pCur.moveToNext())
                    number.add(pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)));
                                   
            
            pCur.close();
        
    

任何帮助将不胜感激。 谢谢!

=============================

编辑:以下是对我有用的代码:

Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,null,null, null);
    while (phones.moveToNext())
    
      String name=phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
      String phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
      Log.i("Details", "Name: "+name+"  Number: "+phoneNumber);

    
    phones.close();

【问题讨论】:

【参考方案1】:

您好,请尝试以下代码获取所有联系人

        Cursor c=dbHelper.getAllContact();
        startManagingCursor(c);
        ArrayList<String> columnArray1 = new ArrayList<String>(); 
        if (c.moveToFirst())
        
            do           
                columnArray1.add(c.getString(0));
             while (c.moveToNext());
        

【讨论】:

【参考方案2】:
String[] projection = new String[]ContactsContract.CommonDataKinds.Phone._ID,
                                    ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,
                                    ContactsContract.CommonDataKinds.Phone.NUMBER;
    String selection = ContactsContract.CommonDataKinds.Phone.HAS_PHONE_NUMBER;
                        + 
    String[] selectionArgs = new String[]  "1" ;                            
    Cursor c =  getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, 
                                        projection, 
                                        selection, 
                                        selectionArgs, null
if (c.moveToFirst())

     do
     
        Log.d("Test", "Contact: id = " + c.getLong(0) + " name = " + c.getString(1) + " phone = " + c.getString(2));
     

【讨论】:

感谢您的建议。这似乎对我不起作用。我尝试以不同的方式使用 do-while 循环,但不幸的是我的应用程序强制关闭。这个也一样。 上面的code应该可以得到所有有电话的联系人。 当我使用此代码时,我的应用程序再次关闭。我从其他地方找到了合适的解决方案。无论如何,感谢您的帮助。

以上是关于无法获取最后联系人的电话号码的主要内容,如果未能解决你的问题,请参考以下文章

Android - 无法获取某些联系人的电话号码

我们正在使用 Lync SDK 获取联系信息,但无法返回完整的电话号码列表

在 Android 上通过电话号码获取联系人

获取android联系人电话号码列表

通过 ID 获取联系电话号码 - 空光标

如何获取联系人/电话号码的“提供者”(skype/whatsapp/google)