Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/186.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 正在从ContactProvider读取生日,列无效_Android_Android Contentprovider - Fatal编程技术网

Android 正在从ContactProvider读取生日,列无效

Android 正在从ContactProvider读取生日,列无效,android,android-contentprovider,Android,Android Contentprovider,我正在做一些测试,以了解提供者如何处理事件等 我正在尝试获取特定帐户的所有联系人,然后阅读每个联系人的详细信息以获得生日(如果有) 我第一次尝试做它在一个围棋,但我没有足够的知识,供应商,所以我试图做它在两个步骤知道,只是看看我是否可以得到它 我在此行中得到无效列: Cursor=cr.query(uri,投影,[…] 联系人id是这里的问题。我如何改进第二个查询以获得我想要的数据?我在代码上尝试了各种mod,但毫无结果 谢谢 我使用的代码是: private void readContacts

我正在做一些测试,以了解提供者如何处理事件等

我正在尝试获取特定帐户的所有联系人,然后阅读每个联系人的详细信息以获得生日(如果有)

我第一次尝试做它在一个围棋,但我没有足够的知识,供应商,所以我试图做它在两个步骤知道,只是看看我是否可以得到它

我在此行中得到无效列: Cursor=cr.query(uri,投影,[…] 联系人id是这里的问题。我如何改进第二个查询以获得我想要的数据?我在代码上尝试了各种mod,但毫无结果

谢谢

我使用的代码是:

private void readContacts(){
        Cursor contByAccCursor = getContactsByAccounts();       
        getContactsBirthdays(contByAccCursor);
    }

    private Cursor getContactsByAccounts() {
        Uri uri = ContactsContract.RawContacts.CONTENT_URI;
        String[] projection = new String[] {
                ContactsContract.RawContacts.CONTACT_ID,
                ContactsContract.RawContacts.ACCOUNT_TYPE
        };
        String where = ContactsContract.RawContacts.ACCOUNT_TYPE + " IN ('com.google', 'vnd.sec.contact.phone', 'com.skype.contacts.sync')";
        return activity.getContentResolver().query(uri, 
                                                    projection, 
                                                    where, 
                                                    null, 
                                                    null);
    }

    private void getContactsBirthdays(Cursor filteredContacts) {
        Uri uri = ContactsContract.Contacts.CONTENT_URI;

        String[] projection = new String[] {
                //ContactsContract.Contacts.DISPLAY_NAME_PRIMARY,
                ContactsContract.CommonDataKinds.Event.CONTACT_ID,
                ContactsContract.CommonDataKinds.Event.START_DATE
        };
        String where =
                ContactsContract.Data.MIMETYPE + "= ? AND " +
                ContactsContract.CommonDataKinds.Event.TYPE + "=" + 
                ContactsContract.CommonDataKinds.Event.TYPE_BIRTHDAY + " AND " +
                ContactsContract.CommonDataKinds.Event.CONTACT_ID + "= ?";

        String[] selectionArgs;
        String sortOrder = null;

        StringBuffer sb = new StringBuffer();

        ContentResolver cr = activity.getContentResolver();

        int accTypeCol = filteredContacts.getColumnIndex(ContactsContract.RawContacts.ACCOUNT_TYPE);

        while(filteredContacts.moveToNext()){

            selectionArgs = new String[] { 
                    ContactsContract.CommonDataKinds.Event.CONTENT_ITEM_TYPE,
                    filteredContacts.getString(filteredContacts.getColumnIndex(ContactsContract.RawContacts.CONTACT_ID))
            };

            Cursor cursor = cr.query(uri, 
                        projection, 
                        where, 
                        selectionArgs, 
                        sortOrder);

            if(cursor.moveToNext()){                
                String dName = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME_PRIMARY));
                String bDay = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Event.START_DATE));
                String accType = filteredContacts.getString(accTypeCol);

                sb.append(dName + "("+accType+")" + " - " + bDay);
                sb.append("\n");
            }
        }       
        Log.d(TAG, sb.toString());
    }

好吧,我现在觉得自己很愚蠢。错误是第二个内容,我得到了错误的一个,一定是累了

这是获取正确数据的正确uri:

private void getContactsBirthdays(Cursor filteredContacts) {
        Uri uri = ContactsContract.Data.CONTENT_URI;

好吧,我现在觉得自己很愚蠢。错误是第二个内容,我得到了错误的一个,一定是累了

这是获取正确数据的正确uri:

private void getContactsBirthdays(Cursor filteredContacts) {
        Uri uri = ContactsContract.Data.CONTENT_URI;