Java 如何通过soap web服务(XML)传递图像的字节数组,并在android设备上解码该字节数组以将其转换回图像

Java 如何通过soap web服务(XML)传递图像的字节数组,并在android设备上解码该字节数组以将其转换回图像,java,android,arrays,vb.net,soap,Java,Android,Arrays,Vb.net,Soap,我想通过web服务将图像发送到android设备。这个web服务是用VB.net编写的,android设备正在调用它来获取数据。我可以正常获取数据,但问题是图像。我已经将图像转换为字节数组,将其转换为字符串,并通过web服务(XML)将其传递给android设备。我无法将这个字符串字节数组解码回android端的图像。如何做到这一点?有简单的解决办法吗?我使用了错误的方法吗?将字节数组转换为字符串有点棘手。由于图像数据可能包含空字节,因此字符串不能为空。您可能需要对字节数组进行编码,以便字符串有

我想通过web服务将图像发送到android设备。这个web服务是用VB.net编写的,android设备正在调用它来获取数据。我可以正常获取数据,但问题是图像。我已经将图像转换为字节数组,将其转换为字符串,并通过web服务(XML)将其传递给android设备。我无法将这个字符串字节数组解码回android端的图像。如何做到这一点?有简单的解决办法吗?我使用了错误的方法吗?

将字节数组转换为字符串有点棘手。由于图像数据可能包含空字节,因此字符串不能为空。您可能需要对字节数组进行编码,以便字符串有效。尝试使用base64编码

考虑以下代码示例:

System.Convert.ToBase64String(byteArray)
您还需要在android中解码base64编码字符串。这里还有一个例子:

import org.apache.commons.codec.binary.Base64;

String base64String = "... your base64 String ...";
byte[] decodedBytes = Base64.decodeBase64(base64String.getBytes());

decodedBytes
将包含原始数据。

用于将图像转换为字符串:

String imageAsString=Base64.encodeToString(byteArray, Base64.DEFAULT);
用于将字符串转换为图像:

byte[] imageAsBytes = Base64.decode(imageAsString.getBytes(), Base64.DEFAULT);

ImageView image = (ImageView)findViewById(R.id.ImageView);
Bitmap imgBitmap=BitmapFactory.decodeByteArray(imageAsBytes,0,imageAsBytes.length);
image.setImageBitmap(imgBitmap);
我们找到了解决办法

在我们使用的Web服务方面:

System.Convert.ToBase64String(byte_arr)
byte[] decodedBytes = Base64.decode(imageByteArray[i].getBytes(),Base64.DEFAULT);

Bitmap bMap = BitmapFactory.decodeByteArray(decodedBytes, 0, decodedBytes.length);
在Android端,我们使用:

System.Convert.ToBase64String(byte_arr)
byte[] decodedBytes = Base64.decode(imageByteArray[i].getBytes(),Base64.DEFAULT);

Bitmap bMap = BitmapFactory.decodeByteArray(decodedBytes, 0, decodedBytes.length);

谢谢你的帮助。干杯

您可以使用org.castor.util.base64编码器将字节数组编码为字符串

byte [] doc = {37, 80, 68, 70, 45, 49, 46};
String image = new String(Base64Encoder.encode(doc));
在web服务类中,使用

byte[] imageData = Base64Decoder.decode(image);

你为什么不能?你有什么问题?你用什么方法解决这个问题?XML到达设备时是什么样子的。“将其转换为字符串”-如何?您使用什么字符串表示法?字节到字符串的转换是错误的。将其转换回字节时,将丢失几个字节。需要找其他的吗way@ChiefTwoPencils真正的问题是,当我将原始字节数组写入一个文件并手动将其放入android的Assets文件夹时,它就可以工作了。但是我们不能直接通过XML传递字节数组。所以我把它转换成字符串并发送出去。但是这个字符串的长度是字节数组长度的两倍,因此它不能在android端被解码。这可能会有帮助。我尝试过这种方法。我认为android默认读取UTF8编码的数据。我得到了类似“此字符不是有效的Base64字符”的错误@Peant为了避免接下来出现的混淆,也许您应该将示例更改为处理通用的
byte[]
而不是转换为字符串的字符串。@Peant byte[]encodedBytes=Base64.encodeBase64(imageByteArray[I].getBytes());字节[]decodedBytes=Base64.decodedbase64(encodedBytes);位图bMap=BitmapFactory.decodeByteArray(DecodeBytes,0,DecodeBytes.length);bMap仍然返回null如果您只访问了数组的第一个字节。。。我在代码中仍然有编码功能,这在那里是不需要的。试试这个:
byte[]decodedBytes=Base64.decodeBase64(imageByteArray)
Bitmap bMap=BitmapFactory.decodeByteArray(decodedBytes,0,decodedBytes.length)
为什么要使用Base 64,而不是其他编码?@voipp Base64类已经包含在Android SDK中,因此不需要在外部添加其他逻辑。