android 中设置HttpURLConnection 超时并判断是否超时
设置超时:
URL url1 = new URL(url);
HttpURLConnection conn = (HttpURLConnection) url1.openConnection();
conn.setRequestMethod("POST");
conn.setConnectTimeout(3000); //3s
conn.setReadTimeout(3000); //3s
conn.setDoOutput(true);
本来以为设置了超时程序就会自动返回,不会有异常了,经过反复调试,的确会抛出SocketTimeoutException 异常
在
out = conn.getOutputStream(); //只是一个承载post内容的东西,这里并没有发送,必须在getInputStream之前
这一句会卡主,然后就异常了,所以我们要判断是否超时,则捕捉SocketTimeoutException异常就可以
整个post请求方法代码如下:
public static String sendPostRequest(String url,
Map<String, String> params, Map<String, String> headers)
throws Exception {
StringBuilder buf = new StringBuilder();
Set<Entry<String, String>> entrys = null;
String result=null;
// 如果存在参数,则放在HTTP请求体,形如name=aaa&age=10
// if (params != null && !params.isEmpty()) {
// entrys = params.entrySet();
// for (Map.Entry<String, String> entry : entrys) {
// buf.append(entry.getKey()).append("=")
// .append(URLEncoder.encode(entry.getValue(), "UTF-8"))
// .append("&");
// }
// buf.deleteCharAt(buf.length() - 1);
// }
//将参数化为xml 格式传输,格式为:<xml><datatype><![CDATA[3]]></datatype></xml>
if (params != null && !params.isEmpty()) {
entrys = params.entrySet();
buf.append("<xml>");
for (Map.Entry<String, String> entry : entrys) {
buf.append("<").append(entry.getKey()).append("><![CDATA[")
.append(URLEncoder.encode(entry.getValue(), "UTF-8"))
.append("]]></").append(entry.getKey()).append(">");
}
buf.append("</xml>");
}
URL url1 = new URL(url);
HttpURLConnection conn = (HttpURLConnection) url1.openConnection();
conn.setRequestMethod("POST");
conn.setConnectTimeout(3000);
conn.setReadTimeout(3000);
conn.setDoOutput(true);
OutputStream out=null;
try {
out = conn.getOutputStream(); //只是一个承载post内容的东西,这里并没有发送,必须在getInputStream之前
out.write(buf.toString().getBytes("UTF-8"));
out.flush();
if (headers != null && !headers.isEmpty()) {
entrys = headers.entrySet();
for (Map.Entry<String, String> entry : entrys) {
conn.setRequestProperty(entry.getKey(), entry.getValue());
}
} //conn.getResponseCode(); // 为了发送成功
if (conn.getResponseCode() == 200) {
// 获取响应的输入流对象
InputStream is = conn.getInputStream(); //真正的发送请求
// 创建字节输出流对象
ByteArrayOutputStream baos = new ByteArrayOutputStream();
// 定义读取的长度
int len = 0;
// 定义缓冲区
byte buffer[] = new byte[1024];
// 按照缓冲区的大小,循环读取
while ((len = is.read(buffer)) != -1) {
// 根据读取的长度写入到os对象中
baos.write(buffer, 0, len);
}
// 释放资源
is.close();
baos.close();
// 返回字符串
result = new String(baos.toByteArray());
}
else
{
result = conn.getResponseCode()+"";
}
}
catch (SocketTimeoutException ex)
{
result = "-3";
} return result;
}
android 中设置HttpURLConnection 超时并判断是否超时的更多相关文章
- Android中设置TextView的颜色setTextColor
tv.setTextColor(Color.parseColor("#FFFFFF")); tv.setTextColor(Color.WHITE); tv.setTextColo ...
- 【转】Android中设置TextView的颜色setTextColor--代码中设置字体颜色
原文网址:http://www.cnblogs.com/myphoebe/archive/2012/01/06/2314728.html android中设置TextView的颜色有方法setText ...
- 【转】Android中设置TextView的颜色setTextColor
原文网址:http://www.cnblogs.com/myphoebe/archive/2012/01/06/2314728.html android中设置TextView的颜色有方法setText ...
- Android中使用HttpURLConnection实现GET POST JSON数据与下载图片
Android中使用HttpURLConnection实现GET POST JSON数据与下载图片 Android6.0中把Apache HTTP Client全部的包与类都标记为deprecated ...
- [转]Android中设置TextView的颜色setTextColor
[转自]http://txlong-onz.iteye.com/blog/1249609 Android中设置TextView的颜色setTextColor android中设置TextView的颜色 ...
- 在Eclipse Android中设置模拟器屏幕大小
在Eclipse Android中设置模拟器屏幕大小是本文要介绍的内容,主要是来了解并学习Eclipse Android中模拟器的设置,具体关于Eclipse Android内容的详解来看本文. 方法 ...
- Android中设置全屏的方法
在实际的应用程序开发中,我们有时需要把 Activity 设置成全屏显示,一般情况下,可以通过两种方式来设置全屏显示效果.其一,通过在代码中可以设置,其二,通过manifest配置文件来设置全屏. 其 ...
- android中设置Animation 动画效果
在 Android 中, Animation 动画效果的实现可以通过两种方式进行实现,一种是 tweened animation 渐变动画,另一种是 frame by frame animation ...
- Android中设置文字大小的定义类型
在Android中所有的组件可以设置大小,但是在设置大小的时候需要指定其单位,这些单位如下: px(pixels):像素: dip(device independent pixels):依赖于设备的像 ...
随机推荐
- Backbone.js学习之初识hello-world
说了好久好久要学习Backbone.js,现在终于下定决心开始学习了.然后呢,就根据我的学习进度在这里做个简单的记录,方便新人,也方便我自己以后回忆. 准备 用bower下载这几个库或框架也是醉了.. ...
- Part 71 Code snippets in visual studio
- $_SERVER 中重要的元素
元素/代码 描述 $_SERVER['PHP_SELF'] 返回当前执行脚本的文件名. $_SERVER['GATEWAY_INTERFACE'] 返回服务器使用的 CGI 规范的版本. $_SE ...
- 64位Windows7升级IE11后无法启动的解决办法
1.控制面板\网络和 Internet\Internet选项 2.在高级选项卡的“安全”组配置
- sql 批量操作(存在的更新,不存在的插入)
标签: sql 2012-09-06 18:13 2408人阅读 评论(0) 收藏 举报 分类: Sql Server(123) 版权声明:本文为博主原创文章,未经博主允许不得转载. update A ...
- 初识 Jenkins
Jenkins: Jenkins 是一款获奖的跨平台持续集成和持续交付软件,可以大大提高生产力.Jenkins 用以构建和测试软件项目,帮助开发者更容易的实现项目变更的持续集成,帮助用户更容易的获取最 ...
- 遇见NodeJS:JavaScript的贵人
在大家的印象中,相当长一段时间里,JavaScript是一门脚本语言,一般不能成为某个项目的担纲主角,作用只是在浏览器里帮忙校验校验输入是不是正确,响应一下鼠标.键盘事件,或者让某个HTML元素动起来 ...
- oc常见误区
1.同步请求可以从因特网请求数据,一旦发送同步请求,程序将停止用户交互,直至服务器返回数据完成,才可以进行下一步操作, 2.异步请求不会阻塞主线程,而会建立一个新的线程来操作,用户发出异步请求后,依然 ...
- webstorm 添加文件模板
Ctrl+Shift+A 搜索设置 File Teamplate 添加 File Teamplate
- Mysql多表查询(两张独立表,一张关系表)
一.数据库设计 1.三个数据表长这样 其中user表记录用户信息,cat主要记录男女性别,mete表是用户id和性别id的对应关系 2.具体数据如下 二.查询目标 查询出所有性别为“男”的 ...