【问题标题】:table raw_contacts has no column named raw_contact_id表 raw_contacts 没有名为 raw_contact_id 的列
【发布时间】:2019-11-02 21:28:12
【问题描述】:

我正在我的 android 应用程序中插入一个这样的新联系人: 我正在添加我的 Java 类我得到的错误是错误插入数据......

我不明白我错过了什么,这就是我面临这个错误的原因

这是我的 Java 类

private static void setContact(Context mContext,Account account){ ContentResolver contentResolver=mContext.getContentResolver();

        int rawContactInsertIndex = operationList.size();


            operationList.add(ContentProviderOperation.newInsert(addCallerIsSyncAdapterParameter(ContactsContract.RawContacts.CONTENT_URI,true))
                    .withValue(ContactsContract.RawContacts.ACCOUNT_TYPE,account.type)
                    .withValue(ContactsContract.RawContacts.ACCOUNT_NAME,account.name)
                    .build());

            operationList.add(ContentProviderOperation.newInsert(addCallerIsSyncAdapterParameter(ContactsContract.RawContacts.CONTENT_URI,true))
                    .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID,rawContactInsertIndex)
                    .withValue(ContactsContract.Data.MIMETYPE,ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE)
                    .withValue(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME,"Alex")
                    .build());

            operationList.add(ContentProviderOperation.newInsert(addCallerIsSyncAdapterParameter(ContactsContract.RawContacts.CONTENT_URI,true))
                    .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID,rawContactInsertIndex)
                    .withValue(ContactsContract.Data.MIMETYPE,ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE)
                    .withValue(ContactsContract.CommonDataKinds.Phone.NUMBER,"+99999999")
                    .build());

            operationList.add(ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI)
                    .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID,rawContactInsertIndex)
                    .withValue(ContactsContract.Data.MIMETYPE,"vnd.android.cursor.item/vnd.com.meetingapp.android.profile")
                    .withValue(ContactsContract.Data.DATA1,"Meet App")
                    .withValue(ContactsContract.Data.DATA2,"Meet App")
                    .withValue(ContactsContract.Data.DATA3,"Meet App")
                    .build());


            try {
                contentResolver.applyBatch(ContactsContract.AUTHORITY, operationList);
                Log.i("inPerformSync", "successfully registered!");
            } catch (Exception e) {
                Log.i("inPerformSync", "register failed "+e.getMessage());
                e.printStackTrace();
            }

我收到此错误:

 E/SQLiteLog: (1) table raw_contacts has no column named raw_contact_id
06-20 10:23:54.819 1610-11666/? E/SQLiteDatabase: Error inserting 
raw_contact_id=79253 pinned=0 contact_id=null data1=Alex account_id=1 mimetype=vnd.android.cursor.item/name
    android.database.sqlite.SQLiteException: table raw_contacts has no column named raw_contact_id (code 1): , while compiling: INSERT INTO raw_contacts(raw_contact_id,pinned,contact_id,data1,account_id,mimetype) VALUES (?,?,?,?,?,?)
    #################################################################
    Error Code : 1 (SQLITE_ERROR)
    Caused By : SQL(query) error or missing database.
        (table raw_contacts has no column named raw_contact_id (code 1): , while compiling: INSERT INTO raw_contacts(raw_contact_id,pinned,contact_id,data1,account_id,mimetype) VALUES (?,?,?,?,?,?))
    #################################################################
        at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
        at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:1058)
        at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:623)
        at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
        at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:59)
        at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31)
        at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1607)
        at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1479)
        at com.android.providers.contacts.ContactsProvider2.insertRawContact(ContactsProvider2.java:4975)
        at com.android.providers.contacts.ContactsProvider2.insertInTransaction(ContactsProvider2.java:4174)
        at com.android.providers.contacts.AbstractContactsProvider.insert(AbstractContactsProvider.java:139)
        at com.android.providers.contacts.ContactsProvider2.insert(ContactsProvider2.java:3441)
        at android.content.ContentProviderOperation.apply(ContentProviderOperation.java:307)
        at com.android.providers.contacts.AbstractContactsProvider.applyBatch(AbstractContactsProvider.java:240)
        at com.android.providers.contacts.ContactsProvider2.applyBatch(ContactsProvider2.java:3721)
        at android.content.ContentProvider$Transport.applyBatch(ContentProvider.java:328)
        at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:192)
        at android.os.Binder.execTransact(Binder.java:453)
06-20 10:23:54.829 1610-11666/? E/DatabaseUtils: Writing exception to parcel
    android.content.OperationApplicationException: insert failed
        at android.content.ContentProviderOperation.apply(ContentProviderOperation.java:309)
        at com.android.providers.contacts.AbstractContactsProvider.applyBatch(AbstractContactsProvider.java:240)
        at com.android.providers.contacts.ContactsProvider2.applyBatch(ContactsProvider2.java:3721)
        at 

android.content.ContentProvider$Transport.applyBatch(ContentProvider.java:328)
        at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:192)
        at android.os.Binder.execTransact(Binder.java:453)

【问题讨论】:

    标签: sqlite android-sqlite sql-insert contacts


    【解决方案1】:

    当内容与另一个条目匹配时,会自动创建原始联系人数据

    一旦插入原始联系人或其组成数据发生更改,提供商将检查原始联系人是否与其他现有原始联系人匹配,如果匹配,则将其与这些联系人聚合。聚合通过 ContactsContract.RawContactsColumns.CONTACT_ID 字段的变化反映在 RawContacts 表中,该字段是对聚合联系人的引用。

    https://developer.android.com/reference/android/provider/ContactsContract.RawContacts.html#aggregation

    【讨论】:

    • 那么,我该怎么办?
    【解决方案2】:

    我终于找到了解决办法。问题是我在PhoneDisplay_Name 字段的valueBackReference 中使用ContactsContract.RawContacts.CONTENT_URI 而不是ContactsContract.Data.CONTENT_URI

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-25
      • 1970-01-01
      • 2017-06-29
      • 1970-01-01
      • 2013-07-29
      • 2020-05-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多