这是我的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.
}
因此,通过上面的代码,对该服务器的实际调用是由该行进行的 - &gt; HttpResponse httpResponse = httpClient.execute(httpPost);
当我的服务器启动时,一切正常,但当它关闭时,进度条会持续加载。我想处理这种情况。做了很多搜索,但只能找到这个post。这对我的情况看起来很好,因为即使我的想法是等待10秒钟来获得响应,如果它超过了那个时间,我需要处理它以在catch块中显示消息。但我根据我的代码无法实现它。有人可以帮我这个吗?我会非常感激。
答案 0 :(得分:1)
在执行网址之前添加以下代码。
HttpParams httpParameters = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(httpParameters, 30000);
HttpConnectionParams.setSoTimeout(httpParameters, 30000);
DefaultHttpClient httpClient = new DefaultHttpClient(httpParameters);
在try块和Catch ConnectTimeOutException
和SocketConnectionTimeOutException
中编写上述代码。您可以在哪里显示一些自定义对话框。
您还可以通过检查HttpClient响应的状态行来判断它。
答案 1 :(得分:1)
您的异常未被命中,因为HttpClient没有抛出异常。也许您的HttpResponse代码中出现错误,例如500.在您的try块中,添加以下行:
response.getStatusLine().getStatusCode()
然后阅读状态代码。如果您的网络服务器已启动,您应该获得200 OK,但如果它已经关闭,您可能会得到500或其他东西。然后,您可以在此处处理需要隐藏旋转进度条的代码,并显示错误消息。