Java — еще один & quot; BitmapFactory.decodeByteArray всегда null & quot;

У меня есть изображение, хранящееся в базе данных в этой форме

"/9j/4AAQSkZJRgABAQAAAQABAAD/2w <...> igD//2Q=="

так что, безусловно, base64 в кодировке.

Я получаю это через функцию PHP:

...
$query = $db->prepare("SELECT `Data` FROM `UserPicture` WHERE `UserId` = ?");

$query->bind_param('i', $id);
$query->execute();
$query->bind_result($data);
$query->fetch();

echo base64_encode($data);

Android получает это через звонок:

StringBuffer result = m_dbi.getResult(Constants.SERVER_HOST_PHP + "/get_user_picture.php", params, "GET");

Отладка Я видел это результат верно.

я пас result.toString () в writeImageToFile (строковое изображение), которое:

...
byte[] decodedByte = Base64.decode(pic, Base64.DEFAULT);
Bitmap bm = BitmapFactory.decodeByteArray(decodedByte, 0, decodedByte.length);
...

фильм правильно, а также decodedByte.length но Ьт всегда ноль.

Я пытался изменить Base64.DEFAULT в NO_PADDING или же NO_WRAP но всегда ноль.

Что может быть причиной ?

0

Решение

Проблема была вызвана тем, что вы сохранили изображения в BLOB с помощью mysqli«s real_escape_string(), Этот метод, как и любой метод экранирования строк, предназначен для текста и изменяет содержимое, которое он воспринимает как недопустимые символы. Применение этого к изображению, а не к строке, повредило изображение.

BLOB следует хранить с использованием процедуры, описанной в эта запись в блоге Oracle, с помощью send_long_data() и не сбежать.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]