2012-03-20 8 views
0

私はMS SQLデータベースからデータを取得し、それをXML文字列としてAndroidデバイスに送信するC#Webサービスを持っています。ms SQLデータベースからwebservice経由でアンドロイドにバイト配列を送信

私は、その後のAndroidでXMLを解析し、Androidのデータベースにデータを格納

これは、すべての文字列と整数データのために正常に動作しますが、私は(画像を格納するために使用されている)バイト配列を取得することはできませんXMLへのバイト配列を追加する

私のC#のコードと同じように動作することが次のようになります。

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 
} 
XmlElement ImageStored = (XmlElement)StockItem.AppendChild(doc.CreateElement("ImageStored")); 

ImageStored.InnerText = Convert.ToBase64String(stockItem.ImageStored); 

そして

は、Androidに私はこれを試してみました

これは私に何のエラーも与えず、データベースに何かを保存しますが、画像の表示に関しては何も表示されません。

どのようにこの作業を得るための助けが素晴らしいだろう。私が愚かであれば、私はC#とAndroidで一緒に働いてみることを初めて試みましたので、私を許してください。

ありがとうございます!

+0

は、バイト配列がABでエンコードされていることを忘れないでください.NET webserviceからのase64文字列であるため、それをデコードする必要があります。私は以下のksoapを使ってこれをどうやって行うことができるかを少し紹介しました。 – DNRN

答えて

1

私はJavaの人ではありませんが、getBytes()の代わりにdecode()を使用する必要があるようです。言い換えると、Base64でエンコードされた文字列を最初にデコードするのではなく、データベースに格納するだけです。

パブリック静的バイト[]デコード(文字列str、INTフラグ)

ので:APIの入力にレベル8デコードBase64でエンコードされたデータと新しいバイト配列に データを返します。末尾のパディング '='文字は、オプションであると見なされますが、存在する場合は、 の数が正しい必要があります。

http://developer.android.com/reference/android/util/Base64.html

1

私はサードパーティのライブラリksoap2を使用どこ私はほとんど同じことを行っています。

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

まず、あなたは私もksoadを使用しているため、あなたは、.NET Webサービスから取得するbase64文字列をデコードする必要があります。[OK]をので、ここで最初の、私は画像を必要と私のオブジェクトのラッパークラスを作成し、例を示します図書館:

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

は私はあなたがより多くの情報:)

が必要な場合は、ここでksoap見つけることができます知ってみましょう:http://code.google.com/p/ksoap2-android/

+0

ありがとう、私はすでにあなたのC#サービスにリクエストを行うためにksoapを使用しています。私はあなたがbase64.decode(nImageStored.item(i).getFirstChild()。getNodeValue()。toString())を使って何を言ったか試しました。しかし、これは私のアプリケーションをクラッシュさせるだけで、例外はありません。 – JamClerk

+0

値があなたに与えるもの:nImageStored.item(i).getFirstChild()。getNodeValue()。toString()?それは文字列ですか、それはbase64文字列ですか? – DNRN

+0

それは私に2,600以上の文字の長さの文字列を与え、ここでのいくつかは次のとおりです。/ 9J/4AAQSkZJRgABAQAAAQABAAD/2wBDAAkGBwgHBgkIBwgKCgkLDRYPDQwMDRsUFRAWIB0iIiAdHx8kKDQsJCYxJx8fLT0tMTU3Ojo6Iys/RD84QzQ5Ojf/2wBDAQoKCg0MDRoPDxo3JR8lNzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzf/wAARCABkAIQDASIAAhEBAxEB/8QAGwABAAIDAQEAAAAAAAAAAAAAAAUGAQMEAgf/xAA5EAABAwIEAwUFBQkBAAAAAAABAAIDBBEFEiExQVGREyJhcYEUobHB0QYjMkJSFTNicoOSovDx4f/EABoBAQADAQEBAAAAAAAAAAAAAAACAwQBBQb/xAArEQACAgEDAwIEBwAAAAAAAAAAAQIDEQQSIQUxQVFhExQiMhVCUpGh0fD/2gAMAwEAAhEDEQA/APuCIi4A – JamClerk

関連する問題