Обновление собственного изображения профиля - невозможно преобразовать BLOB в строку - PullRequest
0 голосов
/ 20 октября 2018

Следующий код работает в основном успешно, но на некоторых устройствах он вылетает и выдает добавленную ошибку.Любые идеи, почему или что я мог бы сделать, чтобы решить эту проблему?

Код

byte[] photo = ...; 
long rawId = ...;
Uri currentImageUri = ...; // retrieved via ContactsContract.Profile.PHOTO_URI
ContentValues values = new ContentValues();
values.put(ContactsContract.Data.RAW_CONTACT_ID, rawId);
values.put(ContactsContract.Data.IS_SUPER_PRIMARY, 1);
values.put(ContactsContract.CommonDataKinds.Photo.PHOTO, photo);
values.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE);

if (currentImageUri != null) {
    // this crashes sometimes, very rarely though
    context.getContentResolver().update(
        Uri.withAppendedPath(ContactsContract.Profile.CONTENT_URI, ContactsContract.Contacts.Data.CONTENT_DIRECTORY),
        values,
        ContactsContract.Data.RAW_CONTACT_ID + " = " + rawId + " and " + ContactsContract.Data.IS_SUPER_PRIMARY + " = 1",
        null);
} else {
    // we need an insert here, this always works without problems
}

Исключение

android.database.sqlite.SQLiteException: unknown error (code 0): Unable to convert BLOB to string
#################################################################
Error Code : 0 (SQLITE_OK)
Caused By : unknown error (code 0): Unable to convert BLOB to string
#################################################################
    at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:179)
    at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:135)
    at android.content.ContentProviderProxy.update(ContentProviderNative.java:572)
    at android.content.ContentResolver.update(ContentResolver.java:1678)
    ... <MY CODE ABOCE - ContentResolver.update line>

1 Ответ

0 голосов
/ 21 октября 2018

Ваш выбор обновления гласит: «обновите все строки данных в URI профиля пользователя, у которых RAW_CONTACT_ID равно X и IS_SUPER_PRIMARY равно true».

Это означает, что вы в основном переопределяете все телефоны, электронную почту, организация, адрес и т. д. строки в таблице Data этого профиля, что делает их Photo строками с указанными байтами фотографии [].

Сначала необходимо выяснить, содержит ли профиль ужефото, если это так, обновите этот конкретный ряд фотографий.Если в нем нет фотографии, вам нужна операция вставки (а не обновление).

Проверьте мой связанный ответ здесь: https://stackoverflow.com/a/47660583/819355 Просто измените код, чтобы обновить профиль вместо URI вместоконтактный URI.

...