资讯专栏INFORMATION COLUMN

HttpURLConnection相关的小记

boredream / 1249人阅读

摘要:相关的小记在上进行网络通信,本身提供的手段是和两种。其中来自于,拥有大量灵活的。相关博文需备梯子。参数在进行网络请求时,尤其是在使用方法时,请求的参数相当重要。至于方法,直接在后跟上相应的参数即可。

HttpURLConnection相关的小记

在Android上进行网络通信,Android本身提供的手段是HttpClient和HttpURLConnection两种。其中HttpClient来自于Apache,拥有大量灵活的API。但出于一些原因Google自己开发了HttpURLConnection,并且建议从Froyo(Android 2.2,API level 8)开始使用HttpURLConnection。(相关博文, 需备梯子。)

如果这两个满足不了需求,可以考虑使用AsyncHttpClient和Volley。

既然官方这么建议,我也就乖乖地使用HttpURLConnection了。

基础

对HTTP协议有一定了解的前提下,使用HttpURLConnection并没有什么难点,基本看个代码也就明白得差不多了。

HttpURLConnection conn = null;
InputStream is = null;
try {
    URL url = new URL(/* 你要的url */);
    conn = (HttpURLConnection) url.openConnection();
    conn.setConnectTimeout(15000);
    conn.setReadTimeout(10000);
    conn.setRequestMethod("GET"); // 按需更换
    conn.setDoInput(true); // 设置此连接是否允许Input的flag
    // 同样还有setDoOutput(boolean)

    conn.connect();
    int responseStatus = conn.getResponseCode();
    is = conn.getInputStream(); // 获取InputStream
    // 做点什么
} catch (IOException e) {
    e.printStackTrace();
} finally {
    if (conn != null) {
        conn.disconnect();
    }
    AndroidUtil.IO.close(is);
}

你可以参考这里和HttpURLConnection的文档来学习更多的内容。

Request参数

在进行网络请求时,尤其是在使用POST方法时,请求的参数相当重要。但HttpURLConnection中并没有直接设置参数的方法。

为此我查阅了下SO,可以参考这个回答来进行带有参数的POST请求。

至于GET方法,直接在url后跟上相应的参数即可。

为了方便起见,我将回答中的getQuery()方法改造了一下,使得可以根据请求方式来生成参数字符串。

/**
 * 将参数列表转换为HttpUrlConnection可用的参数字符串
* 参见http://stackoverflow.com/a/13486223/2369039 * * @param method 进行Http连接的方式,值为GET或POST * @param params 请求的参数列表 * @return 转换后的String * @throws UnsupportedEncodingException */ public static String getRequestQuery(String method, List params) throws UnsupportedEncodingException { StringBuilder result = new StringBuilder(); boolean first = true; for (NameValuePair pair : params) { if (first) { first = false; if ("GET".equalsIgnoreCase(method)) result.append("?"); } else result.append("&"); result.append(URLEncoder.encode(pair.getName(), "UTF-8")); result.append("="); result.append(URLEncoder.encode(pair.getValue(), "UTF-8")); } return result.toString(); } // end static method getRequestQuery
转换InputStream为String

返回Response后,时常会需要将Response中的内容转换成String。

似乎会经常使用到,所以我查找了下合适的方法后,将其写成了个可复用的方法,为自己省点心。

/**
 * 将InputStream中的数据读取为String
* 参见http://stackoverflow.com/a/309718/2369039 * * @param is InputStream * @param bufferSize buffer大小 * @param encoding String编码 * @return 读取出来的String * @throws IOException */ public static String is2String(InputStream is, int bufferSize,String encoding) throws IOException { Reader reader = new InputStreamReader(is, encoding); char[] buffer = new char[bufferSize]; StringBuilder out = new StringBuilder(); int rsz; while ((rsz = reader.read(buffer, 0, bufferSize)) >= 0) { out.append(buffer, 0, rsz); } return out.toString(); } /** * 以UTF-8编码读取InputStream为String * @param is InputStream * @return 读取出来的String * @throws IOException */ public static String is2String(InputStream is) throws IOException { return is2String(is, 50, "UTF-8"); }

最后提醒:不要在主线程中进行网络通信。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/12143.html

相关文章

  • Android 网络请求详解

    摘要:使用的网络请求是基于,我们着重说明一下。如果两种网络请求都想使用怎么办那么是一个最佳解决方案了。在网络请求方面的口碑很好,就连自己也有使用。,监控网络请求及网络错误,提升用户留存。 我们知道大多数的 Android 应用程序都是通过和服务器进行交互来获取数据的。如果使用 HTTP 协议来发送和接收网络数据,就免不了使用 HttpURLConnection 和 HttpClient,而 ...

    cloud 评论0 收藏0
  • 【源起Netty 前传】Linux网络模型小记

    摘要:非阻塞模型这种也很好理解,由阻塞的死等系统响应进化成多次调用查看数据就绪状态。复用模型,以及它的增强版就属于该种模型。此时用户进程阻塞在事件上,数据就绪系统予以通知。信号驱动模型应用进程建立信号处理程序时,是非阻塞的。 引言 之前的两篇文章 FastThreadLocal怎么Fast?、ScheduledThreadPoolExecutor源码解读 搞的我心力交瘁,且读源码过程中深感功...

    Null 评论0 收藏0
  • 前端小白面经小记

    摘要:前端小白最近面试几家公司,写点面经分享给大家,同时记录下自己的缺点以供后期补足,各个公司的开发方向不同,请各位理性看待。直接现场手敲触发的样式。数组去重如何实现如果用的话,里面如何写排序算法。对象何时被修改心态需要调整好,不紧张不匆忙。 前端小白最近面试几家公司,写点面经分享给大家,同时记录下自己的缺点以供后期补足,各个公司的开发方向不同,请各位理性看待。 问题相关 Css 布局方式有...

    FuisonDesign 评论0 收藏0
  • 前端小白面经小记

    摘要:前端小白最近面试几家公司,写点面经分享给大家,同时记录下自己的缺点以供后期补足,各个公司的开发方向不同,请各位理性看待。直接现场手敲触发的样式。数组去重如何实现如果用的话,里面如何写排序算法。对象何时被修改心态需要调整好,不紧张不匆忙。 前端小白最近面试几家公司,写点面经分享给大家,同时记录下自己的缺点以供后期补足,各个公司的开发方向不同,请各位理性看待。 问题相关 Css 布局方式有...

    MSchumi 评论0 收藏0
  • 前端小白面经小记

    摘要:前端小白最近面试几家公司,写点面经分享给大家,同时记录下自己的缺点以供后期补足,各个公司的开发方向不同,请各位理性看待。直接现场手敲触发的样式。数组去重如何实现如果用的话,里面如何写排序算法。对象何时被修改心态需要调整好,不紧张不匆忙。 前端小白最近面试几家公司,写点面经分享给大家,同时记录下自己的缺点以供后期补足,各个公司的开发方向不同,请各位理性看待。 问题相关 Css 布局方式有...

    TerryCai 评论0 收藏0

发表评论

0条评论

boredream

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<