_未使用查询访问的id和号码:Android

_未使用查询访问的id和号码:Android,android,Android,我的代码如下 String projection[] = new String[]{ ContactsContract.Contacts._ID, ContactsContract.Contacts.DISPLAY_NAME }; Cursor cursor = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI,

我的代码如下

String projection[] = new String[]{ ContactsContract.Contacts._ID,
                                            ContactsContract.Contacts.DISPLAY_NAME };
        Cursor cursor = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, //The URI, using the content:// scheme, for the content to retrieve.
                        projection,             // projection
                        null,               // selection
                        null,               // selectionArgs
                        ContactsContract.Data.DISPLAY_NAME + " COLLATE LOCALIZED ASC");
我想将联系人id、姓名和号码(MAIN或任何一种类型)添加到intent中,但问题是我无法访问name。另一个问题是,每个联系人id返回“-1”。为什么?
有什么解决办法吗

query
方法中,将
projection
变量的值设置为
null
而不是关闭,您应该这样尝试:

String[] projection = new String[] {ContactsContract.Data._ID,
                                    ContactsContract.Data.CONTACT_ID,
                                    ContactsContract.Data.DISPLAY_NAME};
Android开发人员文档中明确指出:

将数据从游标公开到列表视图小部件的适配器。光标必须包含名为“\u id”的列,否则此类将不起作用

请参见文档中的此处:


我添加了投影,但您确定号码,因为直到我无法访问号码(联系号码)。有些文章说这个数字存储在他们自己的表中,所以我们必须使用_ID进行查询。我的意思是我必须写入查询方法。我这样做,我得到了号码,但是有没有其他方法可以通过一个查询(如您所给出的)来获得联系人号码。@Pankaj:是的,您可以通过编写一个查询来实现。使用此投影值
String[]projection=new String[]{Phone.\u ID,Phone.DISPLAY\u NAME,Phone.NUMBER}也不要忘记导入
android.provider.ContactsContract.CommonDataTypes.Phone
classok,这是投影。但是如何访问这些号码(比如contactName=c.getString(c.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)))来访问姓名。@Pankj:比如:
String phoneNumber=this.c.getString(this.c.getColumnIndex(Phone.NUMBER))