1

基本的に画像をWebサービスにアップロードするこのAndroidアプリケーションを開発しています。次のコードを使用して、ファイルをサーバーに送信する asynctask があります。

protected Boolean doInBackground(byte[]... params) {
     HttpURLConnection connection = getConnection();
     BufferedOutputStream out = new BufferedOutputStream(connection.getOutputStream()); 
     Log.d("OutputStream", "stream created, about to write");
     out.write(params[0]);
     Log.d("OutputStream", "all bytes written");
     out.close();
}

もちろん、このコード ブロックは、IOExceptions などをキャッチする try catch 内にラップされています。数分程度)、これはまったく意味がありません。

HttpURLConnection は次のように設定されます。

urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setRequestMethod("POST");         
urlConnection.setRequestProperty("Content-Type", this.contentType);
urlConnection.setRequestProperty("User-Agent", String.format("custom-user-agent/%d", R.integer.version_code));
urlConnection.addRequestProperty("SessionID", this.sessionID);
urlConnection.setDoOutput(true);
urlConnection.setConnectTimeout(30000);
urlConnection.setReadTimeout(30000);
urlConnection.setChunkedStreamingMode(0);
urlConnection.setUseCaches(false);
urlConnection.connect();

面白いことに、これは EDGE/3G 接続を中断したときにのみ発生します。wifi接続を中断すると、すぐに例外がスローされます(もちろん、これははるかに便利です).

これについて何か考えはありますか?

4

2 に答える 2

1

少し前に、この問題も発生しましたが、Android 2.3.4 を搭載した Samsung Galaxy SII でのみ発生しました。他のすべてのデバイスには、この問題はありませんでした。この問題を回避するプログラムはありません。

于 2013-03-29T14:25:02.543 に答える
0

urlConnection.connect() を使用する必要はありません。.getOutputStream() を実行すると、接続は暗黙的に開かれます。また、.connect() を作成すると、.getOutputStream() の前で作成できなくなります。さらに、Content-Type ヘッダーを設定する必要があります。

urlConnection.setRequestProperty("Content-Type","application/x-www-form-urlencoded");
于 2013-03-28T18:15:44.693 に答える