1

私は Odata4j を使用しており、私のエンティティにはDataバイナリ ファイルであるフィールドが 1 つあります。ブラウザーで表示すると、Base64 文字列として表示されます。

このファイルを Android デバイスに取り込むにはどうすればよいですか?

取得するために次のことを試しましたbyte[]...

String stringData = entity.getProperty("Data").getValue().toString();
byte[] data = Base64.decodeBase64(stringData);

しかし、これは私に約7バイトの小さな配列を与えているだけです. entityただし、デバッグすると、データに大きなバイナリ値があることがわかります。

「メモリ不足」の例外を生成している 2 番目のファイルにも問題があります。理想的には、このファイルをストリーム/バッファとしてデバイスのストレージに直接ダウンロードできるようにしたいのですが、これは可能ですか?

明確にするために、問題は次のとおりです。このデータをデバイスのストレージに直接ストリーミングする方法は?

4

2 に答える 2

3

OData を使用せずにこの問題を解決しました。バイナリ データのみを返す URL が利用可能です。したがって、この URL を使用すると、他の Java クラスを使用して、データをディスクに直接ストリーミングできます。

したがって、次の URL を使用します。

www.example.com/OData.svc/File/Data/$value

(バイナリデータのみを返します)

URL 接続を作成してダウンロードできます。

URL url = new URL(webPage);
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();

File file = new File(dir, fileName);//need to create a file based on your storage paths

FileOutputStream out = new FileOutputStream(file);
InputStream in = urlConnection.getInputStream();

byte[] buffer = new byte[1024];
int i = 0;
while ((i = in.read(buffer)) > 0) {
    out.write(buffer, 0, i);
}

out.flush();
out.close();
in.close();
于 2013-04-12T15:50:08.940 に答える
1

entity.getProperty("Data").getValue()実際にはbyte[]orを返していると思いchar[]ます。toString()配列 (または実際には をオーバーライドしない任意の型)を呼び出すtoString()と、オブジェクトの型名と ID ハッシュコードで構成される短い文字列が取得されます。byte[]またはの場合、char[]長さは 7 文字です。

entity.getProperty("Data").getValue().getClass()実際のタイプを確認するために印刷することをお勧めします。

于 2013-04-05T15:47:18.010 に答える