Как декодировать BLOB-объект base64 в растровое изображение Android? - PullRequest
0 голосов
/ 11 февраля 2011

У меня есть база данных Sqlite, в которой строка кода base64 хранится как BLOB. Я хочу извлечь этот BLOB из БД, декодировать base64 и показать изображение в ImageView. Я читал о кодировании и декодировании base64, и это то, что я сейчас использую.

        String[] image = new String[100000];
        if (cursor.moveToFirst()){ 
            int i = 0; 

        do {image[i] = cursor.getString(1);
         i++;} 

        while (cursor.moveToNext()); 
String imagebyte = image[0];
    byte[] decodedString = Base64.decode(imagebyte, Base64.DEFAULT);
    Bitmap decodedByte = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.length);
    mImage.setImageBitmap(decodedByte);

Но ничего не появляется, и я не получаю никаких сообщений об ошибках. Чтобы определить проблему, я попытался закодировать и расшифровать изображение, а затем показал растровое изображение. Это правильный способ расшифровки? Я здесь с помощью курсора.getString (1), я пытался с помощью getBlob (1), но все еще ничего не показывает. Должен ли я использовать getString или getBlob? Есть ли простой способ проверить правильность кода base64? Спасибо! * * 1004

1 Ответ

0 голосов
/ 11 февраля 2011

У меня есть база данных Sqlite, в которой строка кода base64 хранится как BLOB.

Почему? Почему бы просто не поместить изображение в BLOB? Что вы получаете путем Base64-кодирования? Это стоит вашего ЦП, времени сборки мусора и места для хранения.

String[] image = new String[100000];

Почему вы думаете, что вам нужно 100 000 String объектов?

do {image[i] = cursor.getString(1);
         i++;} 

        while (cursor.moveToNext());

Почему вы извлекаете этот столбец для всех строк в наборе результатов, если вы используете только одну из них? Особенно учитывая, что вы, очевидно, делаете все это в главном потоке приложений, и, следовательно, в конечном итоге вы столкнетесь с ошибкой «приложение не отвечает» (ANR)?

Кроме того, если этот столбец объявлен в вашей базе данных как BLOB, вы уверены, что getString() будет работать так, как вы ожидаете?

Это правильный способ расшифровки?

Это будет зависеть от того, как вы его закодировали.

Должен ли я использовать getString или getBlob?

Это зависит от того, как вы помещаете данные в таблицу и какой тип данных имеет столбец. Они все должны совпадать.

Но я бы просто избавился от всего, что связано с Base64, и сохранил байтовый массив изображений в столбце BLOB, если вам нужно изображение в таблице.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...