Bad Base - 64 Ошибка при попытке отправить изображение - PullRequest
0 голосов
/ 25 июня 2019

Я хочу поделиться скриншотом страницы между двумя устройствами. Снимок экрана сохраняется в растровом изображении, а затем я преобразую его в байтовый массив, который затем преобразуется в строку в Base 64. Затем строка отправляется обработчику, который будет отображать изображение. После того, как я пытаюсь декодировать изображение, оно дает мне: java.lang.IllegalArgumentException: bad base-64

Я уже пытался отправлять изображения различными способами и пробовал все различные методы Base 64, такие как Base64.DEFAULT, URLSAFE, NOPADDING и т. Д. *

Вот где я создаю скриншот и отправляю:

Bitmap b = 
Screenshot.takescreenshotofRootView(MainActivity.imageView);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
b.compress(Bitmap.CompressFormat.PNG,100,baos);
byte[] bytea = baos.toByteArray();
String temp = Base64.encodeToString(bytea, Base64.DEFAULT);
sendReceive.write(temp.getBytes());

Здесь я обрабатываю эти данные

Handler handler = new Handler(new Handler.Callback() {
@Override
public boolean handleMessage(Message msg) {
switch (msg.what) {
   case MESSAGE_READ:
       MainActivity.imageView.setImageBitmap(bitm);
       byte[] readBuff = (byte[]) msg.obj;
       String tempMsg = new String(readBuff, 0, msg.arg1);
       byte [] encodeByte = Base64.decode(tempMsg,Base64.URL_SAFE);
       Bitmap bitms 
    = BitmapFactory.decodeByteArray(encodeByte,0,encodeByte.length);
       MainActivity.imageView.setImageBitmap(bitms);
       break;
        }
        return true;
    }
});

1 Ответ

0 голосов
/ 25 июня 2019

Возможно, вы получаете OutOfMemoryError, не осознавая этого, делая вашу строку base64 недействительной.Вы должны обернуть свой код блоком try / catch, чтобы увидеть, происходит ли это.Вот пример в моем коде:

    String imageString = "";

    try {
        if (this.theBitmap != null) {
            ByteArrayOutputStream stream = new ByteArrayOutputStream();
            this.theBitmap.compress(Bitmap.CompressFormat.PNG, 100, stream);
            byte[] bytes = stream.toByteArray();
            imageString = Base64.encodeToString(bytes, Base64.DEFAULT);
        }

    }catch(OutOfMemoryError E){
        Log.e("MyApp", "Out Of Memory error");
    } 
...