通过webservice从ms sql数据库发送字节数组到android

时间:2012-03-20 11:47:47

标签: c# android web-services bytearray

我有一个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,所以请原谅我,如果我是愚蠢的。

谢谢!

2 个答案:

答案 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/