Невозможно установить изображение в ImageView после передачи в виде байтового массива через Wi-Fi P2P
Когда я пытаюсь отправить "Hello world!" он работает отлично, но когда я преобразую байты изображения в base64, он показывает java.lang.IllegalArgumentException: плохой base-64, и я все еще получаю bas64 на принимающей стороне, но он повторяется несколько раз, что означает, что поток для больших строк выполняется поток много раз! как это решить?
public void onImageAvailable(ImageReader reader) {
Image image = null;
try {
image = reader.acquireLatestImage();
ByteBuffer buffer = image.getPlanes()[0].getBuffer();
final byte[] bytes = new byte[buffer.capacity()];
buffer.get(bytes);
//((MainActivity)context).sendMessage(bytes);
((MainActivity)context).sendMessage(bytes);
} catch (Exception e) {
Log.e(TAG, e.toString());
}
finally {
if (image != null) {
image.close();
}
}
на приемном конце обработчик обрабатывает полученное изображение
@Override
public void run() {
byte[] buffer = new byte[1024];
int bytes;
while (socket!=null)
{
try {
bytes=inputStream.read(buffer);
if(bytes>0)
{
handler.obtainMessage(MESSAGE_READ,bytes,-1,buffer).sendToTarget();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
И установка изображения в представление изображения, напрямую передавая байтовый массив в функцию, которая преобразует byte[] в растровое изображение, но не работает!
Handler handler=new Handler(new Handler.Callback() {
@Override
public boolean handleMessage(Message msg) {
switch (msg.what)
{
case MESSAGE_READ:
byte[] readBuff= (byte[]) msg.obj;
String tempMsg=new String(readBuff,0,msg.arg1);
/*filenameTextView.setText(tempMsg);*/
Toast.makeText(MainActivity.this,tempMsg,Toast.LENGTH_LONG).show();
try {
oldImageView.setImageBitmap(utilityImageProcessing.getBitmspFromBytes(readBuff));
}catch (Exception e){
e.printStackTrace();
Toast.makeText(MainActivity.this,e.toString(),Toast.LENGTH_LONG).show();
}
break;
}
return true;
}
});