Как сохранить кодировку Base 64 в строку, затем преобразовать обратно в Base 64, а затем преобразовать в растровое изобрAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Как сохранить кодировку Base 64 в строку, затем преобразовать обратно в Base 64, а затем преобразовать в растровое изобр

Сообщение Anonymous »

У меня есть представление сетки, в котором отображаются изображения, происходит следующее: пользователь выбирает из браузера файлов в приложении Android, а затем я сохраняю байты в строку в массиве, который используется адаптером изображения профиля. Затем в адаптере изображения профиля я получаю строковые байты, и мне нужно преобразовать строковые байты в массив байтов, а затем, наконец, преобразовать массив байтов в setImageBitmap() (strBytesImages.add(strBytes)). Но изображения не отображаются пустыми в виде сетки.
Вот как я беру изображение и устанавливаю байты в список массивов строк:

Код: Выделить всё

activityResultLauncher = registerForActivityResult(
new ActivityResultContracts.StartActivityForResult(),
result -> {
if(result.getResultCode() == RESULT_OK && result != null)
{
Uri uploadfileuri = result.getData().getData();
InputStream inputStream = null;//You can get an inputStream using any IO API

if(uploadfileuri != null){
ByteArrayOutputStream output = new ByteArrayOutputStream();
try {
inputStream = getApplicationContext().getContentResolver().openInputStream(uploadfileuri);
byte[] buffer = new byte[8192];
int bytesRead;
Base64OutputStream outputBase64 = new Base64OutputStream(output, Base64.DEFAULT);
try {
while ((bytesRead = inputStream.read(buffer)) != -1) {
outputBase64.write(buffer, 0, bytesRead);
}
} catch (IOException e) {
e.printStackTrace();
}
outputBase64.close();
String strBytes = null;
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
strBytes = java.util.Base64.getEncoder().encodeToString(buffer);
}
strBytesImages.add(strBytes);
profileImageUri.add(uploadfileuri);
baseAdapter.notifyDataSetChanged();

} catch (Exception ex) {

}
}

}
});
Затем в моем адаптере я пытаюсь отобразить изображение, преобразуя строковые байты в массив байтов, а затем, наконец, в массив байтов в растровое изображение:

Код: Выделить всё

View row = convertView;
ViewHolder holder = null;

if (row == null) {
LayoutInflater inflater = ((Activity) context).getLayoutInflater();
row = inflater.inflate(layoutResourceId, parent, false);
holder = new ViewHolder();
holder.image = (ImageView) row.findViewById(R.id.profileImage);
holder.text = (TextView) row.findViewById(R.id.profileDeleteTV);
holder.text.setPaintFlags(holder.text.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);

row.setTag(holder);
} else {
holder = (ViewHolder) row.getTag();
}
byte[] imageByte = null;
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
imageByte = Base64.getDecoder().decode(data.get(position).getBytes());
}
Bitmap bitmap = BitmapFactory.decodeByteArray(imageByte, 0, imageByte.length);
holder.image.setImageBitmap(bitmap);
Но, как я уже сказал, изображения пустые, как мне их отображать?
Причина, по которой я хочу сохранить байты строки base64, заключается в том, что я могу отправить байты строки в API, а затем преобразовать их в физический файл на сервере и сохранить в нем.>

Подробнее здесь: https://stackoverflow.com/questions/798 ... d-then-con
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»