2

OutOfMemoryErrorAndroid で大きなファイルを投稿すると、時々エラーが発生します。これは私が使用しているコードです。私は何か間違ったことをしていますか?

HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("POST");
con.setDoInput(true);
con.setDoOutput(true);
ostream = new DataOutputStream(con.getOutputStream());
byte[] buffer = new byte[1536];
int count;
while ((count = fileInput.read(buffer)) != -1) {
    ostream.write(buffer, 0, count); // This sometimes causes OutOfMemoryError
}
ostream.flush();

ostream.flush()ループ内での呼び出しはwhile役に立ちますか?

4

2 に答える 2

4

このように行う場合は、POST全体をメモリにバッファリングする必要があります。これは、最初にContent-Lengthヘッダーを送信する必要があるためです。

代わりに、FileEntityを含むApacheHTTPライブラリを使用したいと思います。これにより、ファイルを読み取る前に長さを把握できます。この答えを出発点として使用できます。ただし、FileEntityコンストラクターの2番目のパラメーターは、mimeタイプ(image / png、text / htmlなど)である必要があります。

于 2010-12-15T21:28:15.950 に答える
2

HTTP接続は問題ありませんが、Android 2.3.4(タブレットで確認済み)のHttpsURLConnectionImpl.javaにバグがあり、Android 4.1で修正されているため(ソースコードを確認しました)、HTTPSはメモリ不足エラーをトリガーします。

ちなみに、彼は「con.setChunkedStreamingMode(0);」を追加して、POSTデータ全体をRAMにバッファリングすることを避ける必要があります。「con.setDoOutput(true);」の直後 声明。

于 2012-08-10T14:12:35.103 に答える