Отправить байтовый массив из базы данных MS SQL на Android через веб-сервис - PullRequest
0 голосов
/ 20 марта 2012

У меня есть веб-служба C #, которая получает данные из базы данных MS SQL и отправляет их на устройство Android в виде строки XML.

Затем я анализирую XML в Android и сохраняю данные в базе данных Android

Это прекрасно работает для всех строковых и целочисленных данных, но я не могу заставить байтовый массив (который используется для хранения изображения) работать так же

Мой код C # для добавления байтового массива в XML выглядит следующим образом:

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 ]

1 голос
/ 20 марта 2012

Я сделал почти то же самое, где использовал стороннюю библиотеку ksoap2. Итак, вот пример, сначала я создал класс-оболочку для моего объекта, которому нужно изображение:

public class ImageClass {
    private byte[] AttractionImage;
    private String AttractionImageBase64;
        // TODO getter and setters
}

Сначала необходимо декодировать строку base64, полученную из веб-службы .NET, для этого я также использовал библиотеку ksoad:

ImageClass imageClass = new ImageClass();
imageClass.setAttractionImage(Base64.decode("your base62 string"));

Дайте мне знать, если вам нужна дополнительная информация:)

вы можете найти ksoap здесь: http://code.google.com/p/ksoap2-android/

1 голос
/ 20 марта 2012

Я не очень разбираюсь в 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

...