httpClientリクエストタイムアウトの設定と処理

2234 ワード

タイムアウトの原因を設定
私たちのhttpClientリクエストでは、リクエストアドレスが間違っているか、通常の時間内に接続できず、フィードバックが得られないか、サーバがメンテナンスを停止している状態です.
この場合、httpClientリクエストを送信するクライアントは、スレッド内でリクエストのフィードバック情報を待っているため、プロセスがブロックされます.この場合、クライアントが反応しない(アンドロイドシステムでは携帯電話のアプリケーションがクラッシュする)場合は、httpClientを要求するタイムアウト時間を設定してこのトラブルを解決する必要があります.
私たちのhttpClientリクエストクラスでhttpClientリクエストを行う変数を生命します.
 HttpClient httpClient = new DefaultHttpClient();

我々のgetメソッドでは(本稿ではgetリクエストを例に)我々のリクエストオブジェクトを設定する
	//     (6 )
        httpClient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 6000);
        //     (6 )
        httpClient.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT, 6000);

このとき、私たちのリクエストが6秒以上読み込まれた場合、私たちのhttpClientリクエストはConnectTimeoutExceptionという異常を報告します.
この場合、リクエストコードで例外をキャプチャする必要があります.例:
	try{
            //   HttpGet  。
            HttpGet get = new HttpGet(urlAddress);
            System.out.println(urlAddress+"============");
            //   GET  
            HttpResponse httpResponse = httpClient.execute(get);
            //             
            if (httpResponse.getStatusLine()
                    .getStatusCode() == HttpStatus.SC_OK)
            {
                //           
                String result = EntityUtils.toString(httpResponse.getEntity());
                return result;
            }
            else {
                //              "error"
                return "error";
            }
        }catch(ConnectTimeoutException e){
            //               
            e.printStackTrace();
            return "connection time out";
        }finally{
            //   HttpClient
            httpClient.getConnectionManager().shutdown();
        }
私のリクエストがタイムアウトしたとき、私のリクエストクラスはこの例外をキャプチャし、返します.
「接続時間アウト」という文字列
この場合、httpClientリクエストを呼び出した場所で、戻り情報が「connection time out」であるかどうかを判断する必要があります.
もしそうであれば、私たちのリクエストがタイムアウトしたことを証明します.このとき、アンドロイドappがtoastを呼び出して携帯電話に「リクエストがタイムアウトした」と表示できるように、対応するタイムアウト処理を行うことができます.