1

这是我的 doInBackground() 方法,我在其中调用了其他类中的 makeHttpRequest() 方法。

 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

您的异常没有受到影响,因为 HttpClient 没有引发异常。也许您的 HttpResponse 代码中出现错误,例如 500。在您的 try 块中,添加以下行:

response.getStatusLine().getStatusCode()

然后读取状态码。如果您的 Web 服务器启动,您应该得到 200 OK,但如果它关闭,您可能会得到 500 或其他结果。然后,您可以在此处处理需要隐藏旋转进度条的代码,并且可以显示错误消息。

于 2013-01-17T12:45:06.663 回答
1

在执行 url 之前添加以下代码。

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

将上面的代码写在 try 块和 CatchConnectTimeOutExceptionSocketConnectionTimeOutException. 您可以在其中显示一些自定义对话框。

也可以通过查看 HttpClient Response 的状态行来判断。

于 2013-01-17T12:42:57.943 回答