HttpURLConnectionのconnectメソッドで接続できない場合について

5,710 views
Skip to first unread message

ボビン

unread,
Jan 12, 2011, 9:48:28 PM1/12/11
to 日本Androidの会
こんにちは、いつもお世話になります。

AndroidアプリからwebシステムへPOSTでデータを送信する処理を作成しました。
POST送信時に、電波が悪い・接続先がない、等によりwebシステムへ接続できない場合に、
時間がかかって、アプリが「待ち状態」になるのを回避するつもりで、
POST送信処理をサービスにて実装しました。

ところが、実際のテストで存在しないurlに以下のコードのように接続を試みると、
「http.connect();」の行で、応答がなくなり、しばらく待っていると、
「エラー ○○○は応答していません。強制終了ボタン、待機ボタン」とダイアログが表示されます。

// HTTP 接続オブジェクトの取得
HttpURLConnection http =
(HttpURLConnection)url.openConnection();

// POSTメソッドに設定
http.setRequestMethod("POST");

// 接続
http.setDoOutput(true);
http.connect(); //ここで応答なしになる

上記のような応答不能状態を防ぐにはサービスでは難しいでしょうか?
どなたかご存知の方、よろしくお願いします。

藤中佑司

unread,
Jan 12, 2011, 10:15:09 PM1/12/11
to android-g...@googlegroups.com
こんにちは。

UIスレッド(ボタンをタップしてできたスレッドなど)で応答を返さないと
○○○は応答していません~のエラーが発生します。

なので、新たにスレッドを生成して処理を行ってはどうでしょう。
new Thread(){
            public void run() {
                try {

                    // HTTP 接続オブジェクトの取得
                    HttpURLConnection http =
                        (HttpURLConnection)new URL("hogehoge").openConnection();
                   
                    // コネクションタイムアウトを設定 ←これ
                    http.setConnectTimeout(1000);

                   
                    // POSTメソッドに設定
                    http.setRequestMethod("POST");
                    // 接続
                    http.setDoOutput(true);
                    http.connect();//ここで応答なしになる
                   
                } catch (IOException e) {
                    e.printStackTrace();
                }
            };
        }.start();

コネクションタイムアウトも設定しておけばよさそうです。
動作確認したわけではないので、間違ってたらごめんなさい。

2011年1月13日11:48 ボビン <junichi...@gmail.com>:

--
このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
このグループに投稿するには、android-g...@googlegroups.com にメールを送信してください。
このグループから退会するには、android-group-j...@googlegroups.com にメールを送信してください。
詳細については、http://groups.google.com/group/android-group-japan?hl=ja からこのグループにアクセスしてください。


ボビン

unread,
Jan 13, 2011, 5:13:58 AM1/13/11
to 日本Androidの会
藤中さん

お返事ありがとうございます。
教えていただいたスレッドを新たに生成するコードを
追加して試したところ、うまくいきました。
お返事が遅くなってしまい申し訳ありません。
おかげで助かりました。
ありがとうございました。



On 1月13日, 午後12:15, 藤中佑司 <fujinaka.y...@gmail.com> wrote:
> こんにちは。
>
> UIスレッド(ボタンをタップしてできたスレッドなど)で応答を返さないと
> ○○○は応答していません~のエラーが発生します。
>
> なので、新たにスレッドを生成して処理を行ってはどうでしょう。
> new Thread(){
> public void run() {
> try {
> // HTTP 接続オブジェクトの取得
> HttpURLConnection http =
> (HttpURLConnection)new
> URL("hogehoge").openConnection();
>
> // コネクションタイムアウトを設定 ←これ
> http.setConnectTimeout(1000);
>
> // POSTメソッドに設定
> http.setRequestMethod("POST");
> // 接続
> http.setDoOutput(true);
> http.connect();//ここで応答なしになる
>
> } catch (IOException e) {
> e.printStackTrace();
> }
> };
> }.start();
>
> コネクションタイムアウトも設定しておけばよさそうです。
> 動作確認したわけではないので、間違ってたらごめんなさい。
>
> 2011年1月13日11:48 ボビン <junichi.yana...@gmail.com>:
>
> > こんにちは、いつもお世話になります。
>
> > AndroidアプリからwebシステムへPOSTでデータを送信する処理を作成しました。
> > POST送信時に、電波が悪い・接続先がない、等によりwebシステムへ接続できない場合に、
> > 時間がかかって、アプリが「待ち状態」になるのを回避するつもりで、
> > POST送信処理をサービスにて実装しました。
>
> > ところが、実際のテストで存在しないurlに以下のコードのように接続を試みると、
> > 「http.connect();」の行で、応答がなくなり、しばらく待っていると、
> > 「エラー ○○○は応答していません。強制終了ボタン、待機ボタン」とダイアログが表示されます。
>
> > // HTTP 接続オブジェクトの取得
> > HttpURLConnection http =
> > (HttpURLConnection)url.openConnection();
>
> > // POSTメソッドに設定
> > http.setRequestMethod("POST");
>
> > // 接続
> > http.setDoOutput(true);
> > http.connect(); //ここで応答なしになる
>
> > 上記のような応答不能状態を防ぐにはサービスでは難しいでしょうか?
> > どなたかご存知の方、よろしくお願いします。
>
> > --
> > このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
> > このグループに投稿するには、android-g...@googlegroups.com にメールを送信してください。
> > このグループから退会するには、android-group-j...@googlegroups.com<android-group-japan%2Bunsu...@googlegroups.com>にメールを送信してください。
> > 詳細については、http://groups.google.com/group/android-group-japan?hl=jaからこのグループにアクセスしてください。
>
>
Reply all
Reply to author
Forward
0 new messages