我有一个C#Web服务,它从MS SQL数据库获取数据并将其作为XML字符串发送到Android设备。
然后我在Android中解析XML并将数据存储在Android数据库中
这适用于所有字符串和整数数据但我无法获得字节数组(用于存储图像)以相同的方式工作
将字节数组添加到XML的我的C#代码如下所示:
XmlElement ImageStored = (XmlElement)StockItem.AppendChild(doc.CreateElement("ImageStored"));
ImageStored.InnerText = Convert.ToBase64String(stockItem.ImageStored);
在Android中我试过这个:
NodeList nImageStored = doc.getElementsByTagName("ImageStored");
for(int i = 0; i < nImageStored.getLength(); i++)
{
byte[] pImageStored = nImageStored.item(i).getFirstChild().getNodeValue().trim().getBytes();
//save byte[] in database
}
这不会给我任何错误,并且会在数据库中保存一些内容,但是当显示图像时,没有任何内容出现。
如何使这项工作得到任何帮助都会很棒。这是我第一次尝试使用C#和Android,所以请原谅我,如果我是愚蠢的。
谢谢!
答案 0 :(得分:1)
我不是一个Java人,但看起来你应该使用decode()而不是getBytes()。换句话说,您只是将Base64编码的字符串存储在数据库中,而不是先将其解码。
public static byte [] decode(String str,int flags)
从以下版本开始:API Level 8解码输入和返回的Base64编码数据 新字节数组中的数据。最后填充'='字符 被认为是可选的,但如果存在,则必须有 正确的数量。
http://developer.android.com/reference/android/util/Base64.html
答案 1 :(得分:1)
我使用第三方库ksoap2几乎一样。好的,这是一个例子,首先我为我的对象创建了一个需要图像的包装类:
public class ImageClass {
private byte[] AttractionImage;
private String AttractionImageBase64;
// TODO getter and setters
}
首先,您需要解码从.NET Web服务获得的base64字符串,因为我还使用了ksoad库:
ImageClass imageClass = new ImageClass();
imageClass.setAttractionImage(Base64.decode("your base62 string"));
如果您需要更多信息,请告诉我们:)
你可以在这里找到ksoap:http://code.google.com/p/ksoap2-android/