【问题标题】:android.database.sqlite.SQLiteException: unknown error (code 0): Unable to convert BLOB to stringandroid.database.sqlite.SQLiteException:未知错误(代码 0):无法将 BLOB 转换为字符串
【发布时间】:2017-07-28 05:47:20
【问题描述】:

我在更新现有联系人中的姓名时收到此错误。我的代码:

String nameWhere = ContactsContract.Data.CONTACT_ID + "=? AND " + ContactsContract.Data.MIMETYPE + "='"
            + ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE + "'";

String[] idParam = new String[]{contacts.getContactId()};

    ContentValues values = new ContentValues();
    values.put(ContactsContract.Contacts.Data.RAW_CONTACT_ID, id);
    values.put(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, contacts.getName());
    int update = context.getContentResolver().update(ContactsContract.Data.CONTENT_URI, values, nameWhere, idParam);

我也浏览了这些链接: SQLiteException Unable to convert BLOB to string when contact have photo. Android 以及与该问题相关的其他内容。

还有我的日志

E/AndroidRuntime: 致命异常: main 进程:com.embedded.contacts,PID:15248 android.database.sqlite.SQLiteException:未知错误(代码 0):无法将 BLOB 转换为字符串 ################################################# ############### 错误代码:0 (SQLITE_OK) 原因:未知错误(代码 0):无法将 BLOB 转换为字符串 ################################################# ############### ################################################# ############### 错误代码:0 (SQLITE_OK) 原因:未知错误(代码 0):无法将 BLOB 转换为字符串 ################################################# ############### 错误代码:0 (SQLITE_OK) 原因:未知错误(代码 0):无法将 BLOB 转换为字符串 ################################################# ############### ################################################# ############### 在 android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:179) 在 android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:135) 在 android.content.ContentProviderProxy.update(ContentProviderNative.java:568)

【问题讨论】:

  • 显示完整日志...
  • @ρяσѕρєяK 我已经添加了日志,再次检查。

标签: android android-contacts


【解决方案1】:

您的代码正在修改两个值:RAW_CONTACT_IDDISPLAY_NAME。 问题是RAW_CONTACT_ID 是只读的。 我假设您不打算修改 raw-contact-id 。 如果您只想通过 ID 修改联系人的 DISPLAY_NAME,请尝试以下操作:

String selection = Data.CONTACT_ID + "=" + contacts.getContactId() + " AND " + Data.MIMETYPE + "='" + StructuredName.CONTENT_ITEM_TYPE + "'";
ContentValues values = new ContentValues();
values.put(StructuredName.DISPLAY_NAME, contacts.getName()); // make sure getName() returns a String!!!
getContentResolver().update(Data.CONTENT_URI, values, selection, null);

(验证您导入了正确的DataStructuredName 类)

【讨论】:

  • 我也试过删除RAW_CONTACT_ID更新,但我的问题没有解决。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-07
  • 2020-08-31
相关资源
最近更新 更多