Java 如何在android中从ContactsContract.Contacts获取姓名、号码和ID

Java 如何在android中从ContactsContract.Contacts获取姓名、号码和ID,java,android,contacts,Java,Android,Contacts,我得到以下错误java.lang.IllegalArgumentException:列数据无效1 这是我的密码 @Override public void onActivityResult(int reqCode, int resultCode, Intent data){ super.onActivityResult(reqCode, resultCode, data); setResult(RESULT_OK, data); swit

我得到以下错误java.lang.IllegalArgumentException:列数据无效1

这是我的密码

 @Override
    public void onActivityResult(int reqCode, int resultCode, Intent data){
        super.onActivityResult(reqCode, resultCode, data);
        setResult(RESULT_OK, data);
        switch (reqCode) {
            case (PICK_CONTACT) :
                if (resultCode == Activity.RESULT_OK) {


                    TextView phoneTextView = (TextView)findViewById(R.id.textView);
                    Uri contactData = data.getData();

                    String[] mProjection =
                            {
                                    ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,
                                    ContactsContract.CommonDataKinds.Phone.NUMBER,   // Contract class constant for the word column name
                                    ContactsContract.CommonDataKinds.Phone._ID, // Contract class constant for the locale column name
                            };

                    Cursor c =  getContentResolver().query(contactData,mProjection, null, null, null);

                    String contactName = "";



                    for(c.moveToFirst(); !c.isAfterLast(); c.moveToNext()){
                        contactName = c.getString(0);
                        Log.v("NAME OF CONTACT", contactName);
                    }




                        c.close();

                    }
                }
                //break;
        }

    }
当代码如上所示时,我会收到前面显示的错误消息

但是,当我更改这段代码时

String[] mProjection =
                            {
                                    ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,
                                    ContactsContract.CommonDataKinds.Phone.NUMBER,   // Contract class constant for the word column name
                                    ContactsContract.CommonDataKinds.Phone._ID, // Contract class constant for the locale column name
                            };

它工作,日志显示名称

我的问题是,为什么会这样

String[] mProjection =
                            {
                                    ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,

                            };