1

これは、他のクラスにある makeHttpRequest() メソッドを呼び出す doInBackground() メソッドです。

 protected String doInBackground(Integer... args) {
            // Building Parameters

            String parameter1 = "tenant";
                String parameter2 = "price";

            List<NameValuePair> params = new ArrayList<NameValuePair>();

                params.add(new BasicNameValuePair("person",parameter1));
                        params.add(new BasicNameValuePair("price",parameter2));

            JSONObject json = jParser.makeHttpRequest(requiredurl, "POST", params);


            Log.d("Details", json.toString());



                int success = json.getInt("connected");

                if (success == 1) {

                    //blah blah
                      }
        }

makeHttpRequest() メソッド:

public JSONObject makeHttpRequest(String url, String method,
            List<NameValuePair> params) {

        // Making HTTP request
        try {

            // check for request method
            if(method == "POST"){

                // defaultHttpClient
                DefaultHttpClient httpClient = new DefaultHttpClient();
                HttpPost httpPost = new HttpPost(url);
                httpPost.setEntity(new UrlEncodedFormEntity(params));

                HttpResponse httpResponse = httpClient.execute(httpPost);

                HttpEntity httpEntity = httpResponse.getEntity();
                is = httpEntity.getContent();

            }       

        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

       ................
       ....................... // Here the result is extracted and made it to json object
       .............................

        // return JSON 
        return jObj;  // returning the json object to the method that calls.

    }

したがって、上記のコードでは、サーバーへの実際の呼び出しはこの行によって行われます -> HttpResponse httpResponse = httpClient.execute(httpPost);

サーバーが起動しているときはすべて正常に動作しますが、停止していると進行状況バーが継続的に読み込まれます。この状況を何とかしたい。たくさん検索しましたが、この投稿しか見つかりませんでした。私の考えでは、応答を得るために10秒待つことであり、そのタイムアウトを超えた場合は、catch ブロックにメッセージを表示するためにそれを処理する必要があるため、これは私の状況に適しています。しかし、私のコードに従って実装することはできません。誰かがこれについて私を助けてくれますか? とても感謝しています。

4

2 に答える 2

1

URL を実行する前に、次のコードを追加します。

HttpParams httpParameters = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(httpParameters, 30000);
HttpConnectionParams.setSoTimeout(httpParameters, 30000);
DefaultHttpClient httpClient = new DefaultHttpClient(httpParameters);

上記のコードを try ブロックと CatchConnectTimeOutExceptionとに記述しSocketConnectionTimeOutExceptionます。カスタムダイアログを表示できる場所。

HttpClient Response のステータス行で判断することもできます。

于 2013-01-17T12:42:57.943 に答える
1

HttpClient が例外をスローしていないため、例外がヒットしていません。HttpResponse コードで 500 などのエラーが発生している可能性があります。try ブロックに次の行を追加します。

response.getStatusLine().getStatusCode()

次に、ステータス コードを読み取ります。Web サーバーが稼働している場合は 200 OK が返されるはずですが、停止している場合は、おそらく 500 またはそれ以外の値が返されます。次に、回転する進行状況バーを非表示にする必要があるコードをここで処理し、エラー メッセージを表示できます。

于 2013-01-17T12:45:06.663 に答える