3

Webサービスに接続する前に、Webサービスが利用可能かどうかを確認したいので、利用できない場合は、そのことを示すダイアログを表示できます。私の最初の試みはこれです:

public void isAvailable(){

    // first check if there is a WiFi/data connection available... then:

    URL url = new URL("URL HERE");
    HttpURLConnection connection = (HttpURLConnection) url.openConnection();
    connection.setRequestProperty("Connection", "close");
    connection.setConnectTimeout(10000); // Timeout 10 seconds
    connection.connect();

    // If the web service is available
    if (connection.getResponseCode() == 200) {
        return true;
    }
    else return false;
}

そして別のクラスで私はします

if(...isAvailable()){
    HttpPost httpPost = new HttpPost("SAME URL HERE");
    StringEntity postEntity = new StringEntity(SOAPRequest, HTTP.UTF_8);
    postEntity.setContentType("text/xml");
    httpPost.setHeader("Content-Type", "application/soap+xml;charset=UTF-8");
    httpPost.setEntity(postEntity);

    // Get the response
    HttpClient httpclient = new DefaultHttpClient();
    BasicHttpResponse httpResponse = (BasicHttpResponse) httpclient.execute(httpPost);

    // Convert HttpResponse to InputStream for parsing
    HttpEntity responseEntity = httpResponse.getEntity();
    InputStream soapResponse = responseEntity.getContent();

    // Parse the result and do stuff with the data...
}

ただし、同じURLに2回接続しているため、これは非効率的で、コードの速度が低下する可能性があります。

まず第一に、そうですか?

第二に、これを行うためのより良い方法は何ですか?

4

3 に答える 3

3

接続してみて、タイムアウトした場合は、例外を処理してエラーを表示します。

于 2012-10-16T17:15:27.073 に答える
0

HttpConnectionParamsクラスのメソッドを検討する必要があるかもしれません。

public static void setConnectionTimeout(HttpParams params、int timeout)

接続が確立されるまでのタイムアウトを設定します。ゼロの値は、タイムアウトが使用されないことを意味します。デフォルト値はゼロです。

public static void setSoTimeout(HttpParams params、int timeout)

デフォルトのソケットタイムアウト(SO_TIMEOUT)をミリ秒単位で設定します。これは、データを待機するためのタイムアウトです。ゼロのタイムアウト値は、無限のタイムアウトとして解釈されます。この値は、メソッドパラメータにソケットタイムアウトが設定されていない場合に使用されます。

お役に立てれば。

于 2012-10-16T17:31:12.763 に答える
0

上記と同様に、タイムアウトをチェックする方法は次のとおりです。

HttpParams httpParameters = new BasicHttpParams();

// Set the timeout in milliseconds until a connection is established.
// The default value is zero, that means the timeout is not used. 
int timeoutConnection = 3000;
HttpConnectionParams.setConnectionTimeout(httpParameters, timeoutConnection);
// Set the default socket timeout (SO_TIMEOUT) 
// in milliseconds which is the timeout for waiting for data.
int timeoutSocket = 5000;
HttpConnectionParams.setSoTimeout(httpParameters, timeoutSocket);

次に、HttpParametersをhttpClientのコンストラクターに渡します。

DefaultHttpClient httpClient = new DefaultHttpClient(httpParameters);
于 2012-10-16T17:32:24.733 に答える