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

时间:2014-09-17 10:26:47

标签: android android-contacts android-cursor

因此,我无法使用其ID获取联系人的电话号码。

这是我用来检索号码的代码:

public String getNumber(){
        //gets numbers by id
        if (hasPhoneNumber){

            ContentResolver contentResolver=context.getContentResolver();
            Cursor cursor=contentResolver.query(
                    ContactsContract.Contacts.CONTENT_URI,
                    null,
                    ContactsContract.Contacts._ID+" = "+id,
                    null,
                    null
            ); //TODO : resolve empty cursor error
            //contact seems to have no data available?

            if (cursor.moveToFirst()){

                cursor.moveToNext();

                String contactId=cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));

                Cursor phones=contentResolver.query(
                        ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                        null,
                        ContactsContract.CommonDataKinds.Phone.CONTACT_ID+" = "+contactId,
                        null,
                        null);

                if (phones.moveToFirst()){
                    while (phones.moveToNext()) {
                        this.number=phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                    }
                }

                phones.close();
            } else {
                test("cursor error...");
            }

            cursor.close();

            return number;
        } else {
            return null;
        }
    }

它适用于一些联系人,但大多数显示"光标错误..." Toast(测试("光标错误......"))

总是

  

光标光标

有错误。

我的猜测是空的,但我知道我保存了这些联系人的电话号码。我该如何解决?我还有其他值要求吗?

提前致谢!

编辑:

这是我检索ID和名称的方式:

contactCursor=getActivity().getContentResolver().query(
                ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                new String[]{
                        ContactsContract.Contacts._ID,//0 - Long
                        ContactsContract.Contacts.DISPLAY_NAME_PRIMARY,//1 - String
                        ContactsContract.Contacts.HAS_PHONE_NUMBER,//2 - Integer
                },
                null,
                null,
                ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME+" ASC");

编辑2:

我在github存储库中拥有所有内容:https://github.com/nicolas-d-torres/Syncc

Code的第一个块在app / src / main / java / gtsarandum / syncc / SynccContact

app / src / main / java / gtsarandum / syncc / ContactFragment中的第二个

1 个答案:

答案 0 :(得分:1)

我知道这个答案有点晚了但希望它可以帮助其他有类似问题的人。两个游标查询都将id用作字符串

ContactsContract.Contacts._ID+" = "+id,

ContactsContract.CommonDataKinds.Phone.CONTACT_ID+" = "+contactId,

应该是

ContactsContract.Contacts._ID + " = " + Uri.encode(id),

ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = "+ Uri.encode(contactId),