android url 超时,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 params, Map headers)

throws Exception {

StringBuilder buf = new StringBuilder();

Set> entrys = null;

String result=null;

// 如果存在参数,则放在HTTP请求体,形如name=aaa&age=10

// if (params != null && !params.isEmpty()) {

// entrys = params.entrySet();

// for (Map.Entry entry : entrys) {

// buf.append(entry.getKey()).append("=")

// .append(URLEncoder.encode(entry.getValue(), "UTF-8"))

// .append("&");

// }

// buf.deleteCharAt(buf.length() - 1);

// }

//将参数化为xml 格式传输,格式为:

if (params != null && !params.isEmpty()) {

entrys = params.entrySet();

buf.append("");

for (Map.Entry entry : entrys) {

buf.append("

.append(URLEncoder.encode(entry.getValue(), "UTF-8"))

.append("]]>").append(entry.getKey()).append(">");

}

buf.append("");

}

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 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中设置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):依赖于设备的像 ...

随机推荐

每日一九度之 题目1039:Zero-complexity Transposition

时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:3372 解决:1392 题目描述: You are given a sequence of integer numbers. Zero-co ...

TX Textcontrol 使用总结六——常用属性设置

1.字体设置 Tx textcontrol字体设置以版本22为例,直接设置FontSize =int,字体大小将小于正常其他控件字体设置.应做如下处理(仅供参考) this.textControl1. ...

Codeforces Round #268 (Div. 1) A. 24 Game 构造

A. 24 Game Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/468/problem/A D ...

php中header函数后是否应该有exit

通常有一下三种:  代码如下 复制代码 Location: xxxx:yyyy/zzzz Content-Type: xxxx/yyyy Status: nnn xxxxxx 常用实例 1.实现重定向 ...

CRM窗体中只读的控件不会引发Update事件

在CRM的窗体设计时,如果把某一个控件设为只读了,仅管你在后台用代码修改了值,这个值也不会起任何作用,更不会提交到后台,触发Update事件!

2015第27周三Java内存模型

自己写的代码,6个月不看也是别人的代码,自己学的知识也同样如此,学完的知识如果不使用或者不常常回顾,那么还不是自己的知识. 要认识java线程安全,必须了解两个主要的点:java的内存模型,java的 ...

ThreadLocal线程本地变量

首先说明ThreadLocal存放的值是线程内共享的,线程间互斥的,主要用于线程内共享一些数据,避免通过参数来传递,这样处理后,能够优雅的解决一些实际问题,比如hibernate中的OpenSessi ...

深入解析MySQL视图view

阅读目录---深入解析MySQL视图view 创建视图 查看视图 视图的更改 create or replace view alter DML drop 使用with check option约束 嵌 ...

Python11 RabbitMQ Redis

本节内容 1.RabbitMQ 2.Redis RabbitMQ队列 安装 http://www.rabbitmq.com/install-standalone-mac.html 安装python r ...

专题:DP杂题1

A POJ 1018 Communication System B POJ 1050 To the Max C POJ 1083 Moving Tables D POJ 1125 Stockbroke ...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值