0

これは、 Androidクライアントから取得されるXMLファイルの例です。

<test>
<to>Mee</to>
<from>Youuu</from>
<img src="http://www.domain.com/path/to/my/image.jpg" />
</test>

これについて XML パーサーを作成しました。私の問題は、それを Android クライアントに渡すときに、イメージ パスの代わりにイメージ バイナリ データが必要なことです。どうすればこれを達成でき、上記の XML をバイナリ データでどのように更新できますか。

4

2 に答える 2

2

Base64を使用してイメージ バイナリ データ ( で表されるbyte[]) をエンコードし、それを CDATA として xml に含めることができます。次に、Android マシンで、それをバイト配列にデコードし、画像をレンダリングします。

Apache Commonsを使用してエンコード/デコードできます。

編集:

画像データを変換するには、画像データのバイト表現を取得する必要があります。私の例を見てください。これは と を使用sun.misc.BASE64Decodersun.misc.BASE64Encoderています。Android で自由に使えるものに応じて、適応する必要がある場合があります (Apache Commons を参照)。

public class SO11096275 {
    public static byte[] readImage(URL url) throws IOException {
        final ByteArrayOutputStream bais = new ByteArrayOutputStream();
        final InputStream is = url.openStream();
        try {
            int n;
            byte[] b = new byte[4096];
            while ((n = is.read(b)) > 0) {
                bais.write(b, 0, n);
            }
            return bais.toByteArray();
        } finally {
            if (is != null) {
                is.close();
            }
        }
    }

    public static void main(String[] args) throws Exception {
        URL url = new URL("http://upload.wikimedia.org/wikipedia/en/b/bc/Wiki.png");
        byte[] imgData = readImage(url);
        String imgBase64 = new BASE64Encoder().encode(imgData);
        System.out.println(imgBase64);
        byte[] decodedData = new BASE64Decoder().decodeBuffer(imgBase64);
        FileUtils.writeByteArrayToFile(new File("/path/to/wikipedia-logo.png"), decodedData); // apache commons
    }
}

次に、画像データを の文字列として取得しますimgBase64。必要な DOM 実装 (dom4j など) を使用してノードを xml に追加するだけです。CDATAXMLに追加するメソッドがあります。最後に、Android では、ノードのコンテンツを取得するだけで済みます。上記のようにデコードして、イメージに対して必要な処理を実行できます。

于 2012-06-19T07:25:51.293 に答える
0

JSON、Protocol Buffer などの XML 代替が役立ちます。

于 2012-06-19T07:48:41.040 に答える