【发布时间】:2016-03-14 19:16:19
【问题描述】:
我正在尝试创建处理程序,如果服务器在 20 秒内没有响应,它将终止 http 请求。我想知道从异步任务类中做到这一点的最佳方法是什么。
这是我的代码:
public class DBcontroller extends AsyncTask <List<NameValuePair>, Void, String>{
private static String url = "";
private Context context = null ;
public AsyncResponse delegate= null;
private PropertyReader propertyReader;
private Properties properties;
public DBcontroller(Context mycontext,AsyncResponse myresponse) {
context = mycontext;
delegate = myresponse;
propertyReader = new PropertyReader(context);
properties = propertyReader.getMyProperties("config.properties");
url = properties.getProperty("url");
}
@Override
protected void onPreExecute() {
super.onPreExecute();
delegate.preProcess();
}
@Override
protected String doInBackground(List<NameValuePair>... params) {
return postDataToServer(params[0]);
}
@Override
protected void onPostExecute(String resStr) {
super.onPostExecute(resStr);
delegate.handleResponse(resStr);
}
private String postDataToServer(List<NameValuePair> list) {
//check
for (int i=0;i<list.size();i++)
Log.d("responseString", list.get(i).toString());
//check
HttpClient client = new DefaultHttpClient();
HttpPost post = new HttpPost(url);
String responseString = null;
try {
post.setEntity(new UrlEncodedFormEntity(list));
HttpResponse response = client.execute(post);
HttpEntity entity = response.getEntity();
responseString = EntityUtils.toString(entity);
Log.d("responseString1", responseString);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
if(responseString!= null)
Log.d("responseString2", responseString);
return responseString;
}
}
【问题讨论】:
-
我想这可能会对你有所帮助stackoverflow.com/questions/693997/…
-
developer.android.com/about/versions/marshmallow/…。不推荐使用 HttpClient 使用 HttpUrlConnection 或者您可以使用 okhttp 来设置超时。你也可以去掉for循环中的一些代码可以把它们留在外面