文档章节

安卓入门笔记之HttpURLConnection的使用

twobeings
 twobeings
发布于 2014/05/10 17:01
字数 1282
阅读 7048
收藏 13
点赞 0
评论 0

1.HttpURLConnection连接URL
        1)创建一个URL对象

URL url = new URL(http://www.baidu.com);

2)利用HttpURLConnection对象从网络中获取网页数据

HttpURLConnection conn = (HttpURLConnection) url.openConnection();

3)设置连接超时

conn.setConnectTimeout(6*1000);

4)对响应码进行判断

if (conn.getResponseCode() != 200)    //从Internet获取网页,发送请求,将网页以流的形式读回来

throw new RuntimeException("请求url失败");

5)得到网络返回的输入流

InputStream is = conn.getInputStream();
6)String result = readData(is, "GBK"); //文件流输入出文件用outStream.write
7)conn.disconnect();

总结:
--记得设置连接超时,如果网络不好,Android系统在超过默认时间会收回资源中断操作.
--返回的响应码200,是成功.
--在Android中对文件流的操作和JAVA SE上面是一样的.
--在对大文件的操作时,要将文件写到SDCard上面,不要直接写到手机内存上.
--操作大文件是,要一遍从网络上读,一遍要往SDCard上面写,减少手机内存的使用.这点很重要,面试经常会被问到.
--对文件流操作完,要记得及时关闭.


2.向Internet发送请求参数
步骤:
1)创建URL对象:URL realUrl = new URL(requestUrl);
2)通过HttpURLConnection对象,向网络地址发送请求

HttpURLConnection conn = (HttpURLConnection) realUrl.openConnection();
3)设置容许输出:conn.setDoOutput(true);
4)设置不使用缓存:conn.setUseCaches(false);
5)设置使用POST的方式发送:conn.setRequestMethod("POST");
6)设置维持长连接:conn.setRequestProperty("Connection", "Keep-Alive");
7)设置文件字符集:conn.setRequestProperty("Charset", "UTF-8");
8)设置文件长度:conn.setRequestProperty("Content-Length", String.valueOf(data.length));
9)设置文件类型:conn.setRequestProperty("Content-Type","application/x-www-form-urlencoded");
10)以流的方式输出.
总结:
--发送POST请求必须设置允许输出
--不要使用缓存,容易出现问题.
--在开始用HttpURLConnection对象的setRequestProperty()设置,就是生成HTML文件头.

-------------以上来自小濑网易博客longzhanfeng1988的博客

(估计文章也是转载,没有结束,还有向网络发送xml数据没有介绍完,可以参见我收藏的本站博客Android 网络编程之HttpURLConnection作者是wangxigui


---------以下来自y-z-f博客园博客Y-Z-F的技术烙印


一、前提准备

           在开始实际编码之前,我们有必要先了解下将会用的类以及方法,进行一个大体的了解。

  1. URL类
          这个类主要的功能是定位到要获取资源的网址以及打开连接.
    比如下面的代码:

    1 URL realurl = new URL("http:\\xxx.xxx.xxx\xx\xx\xx");2 realurl.openConnection();

     

  2. HttpURLConnection类
         该类才是我们这节的主角,连接设置都需要通过该类。
    这里我们需要使用到很多的方法,比如设置请求方式为POST,为需要发送过去的数据以及设置超时时间,获得返回的数据。
    下面列出了需要使用到的方法:

    1. setDoOutput(Boolean)   设置是否可以写入数据

    2. setRequestMethod(String)  设置请求的方式("GET"、"POST")

    3. OutputStream getOutputStream()  获得输出流对象(其实通过这个就可以往这个请求里面写数据,这样网站那就可以获得数据了)

    4. InputStream getInputStream()    获得输入流对象(其实就是最后网站返回过来的数据)

  3. PrintWriter类
         这个类的出现的原因是getOutputStream得到的OutputStream没法直接将字符串写入到输出流中,必须以char[]数据的方式写入,
    操作上比较麻烦,所以使用这个类,可以很方便的直接将String写入到输出流中。这里我只使用的写入输出流、刷新输出流、关闭输出流。
    对应的方法如下:

    1. print(String)  用于写入输出流(就是把数据提交给网站)格式必须为(key=value&key1=value1)(ASP.NET 获取的方式为Request.Form["key"]来获取对应的值)

    2. flush()  立即刷新

    3. close()  关闭输出流,进行操作之后必须使用

 

   上面已经介绍了所有要使用的方法,这里仅仅只是作为快速学习的方式。

 

二、实际编码

           下面的代码我们会写一个工具类HttpUtil来封装POST请求的方法,以便以后随时可以使用。

      

复制代码

 1 final class HttpUtil 
 2 { 
 3      public InputStream sendPost(String url,String params) throw IOException 
 4      { 
 5              URL realurl = null; 
 6              InputStream in = null; 
 7              HttpURLConnection conn = null; 
 8              try{ 
 9                      realurl = new URL(url);
 10                      conn = (HttpURLConnection)realurl.openConnection();
 11                      conn.setDoOutput(true);
 12                      conn.setRequestMethod("POST");
 13                      PrintWriter pw = new PrintWriter(conn.getOutputStream());
 14                      pw.print(params);
 15                      pw.flush();
 16                      pw.close();
 17                      in = conn.getInputStream();
 18              }catch(MalformedURLException eio){
 19                      
 20              }
 21               return in;
 22      }
 23 }

复制代码

 

三、问题总结

         在后面的使用中大家可能会出现很多的问题,这里我可以总结下:

  1. 在进行网络连接前必须拥有对应的权限,所以我们需要在AndroidManifest.xml文件中添加访问网络的权限:<uses-permission android:name="android.permission.INTERNET"/>

  2. 如果这样之后网络连接还是出错则表示你连接路径是错的

  3. 如果连接路径是对的,则可能是你POST的数据格式出现了问题

[很多人在写HttpURLConnection时都不注意写AndroidManifest.xml文件的配置,直到报错了才能知道怎么用,现附代码如下:]

< /activity> 
< /application> 
< uses-permission android:name="android.permission.INTERNET"> 
< /uses-permission> 
< /manifest>




© 著作权归作者所有

共有 人打赏支持
twobeings
粉丝 3
博文 24
码字总数 1219
作品 0
浦东
说说在 Android 中如何发送 HTTP 请求

客户端会向服务器发出一条 HTTP 请求,服务器收到请求后会返回一些数据给客户端,然后客户端再对这些数据进行解析与处理。 1 HttpURLConnection 可以使用 HttpURLConnection(官方推荐) 来发...

deniro ⋅ 06/09 ⋅ 0

Android RxJava:这是一份RxJava使用入门学习指南

前言 由于其基于事件流的链式调用、逻辑简洁 & 使用简单的特点,深受各大 开发者的欢迎。 如果还不了解RxJava,请看文章:Android:这是一篇 清晰 & 易懂的Rxjava 入门教程 今天,我将为初学...

Carson_Ho ⋅ 06/09 ⋅ 0

Android开发隐藏标题栏问题

第一种方式: requestWindowFeature(Window.FEATURENOTITLE); 注意,当继承的类为AppCompatActivity 时,这种方式没有用,如下,要将其改为Activity public class MainActivity extends AppC...

郭雨轲 ⋅ 04/25 ⋅ 0

Android RxJava: 这是一份全面的 操作符 使用汇总 (含详细实例讲解)

前言 ,由于其基于事件流的链式调用、逻辑简洁 & 使用简单的特点,深受各大 开发者的欢迎。 如果还不了解RxJava,请看文章:Android:这是一篇 清晰 & 易懂的Rxjava 入门教程 如此受欢迎的原...

Carson_Ho ⋅ 05/31 ⋅ 0

腾讯X5WebView集成2018-05-15

工作中经常偶尔会用到H5网页来加载页面,使用原生的Android的WebView可以加载,但是当网页内容比较多的时候,需要等待很久才能加载完,加载完后用户才能看到网页中的内容,这样用户需要等很久...

林灬 ⋅ 05/15 ⋅ 0

Google让Chromebook用户在Chrome OS中管理所有Android文件

Google Chromium开发者FrançoisBeaufort透露,Chrome操作系统团队正计划在Files应用中让Chromebook设备管理所有的Android文件。被称为“Android文件”的新功能已在Chrome OS Dev频道中实施,...

稿源:cnBeta.COM ⋅ 06/04 ⋅ 0

基于 MVP 架构使用Android通用开发框架快速开发微博项目实战

课程目标: 基于 MVP 架构使用Android通用开发框架快速开发微博项目实战 适应人群: 适合大学生和初中级android开发工程师,可以系统化的微博类APP的开发,系统化掌握商业化项目的开发。* 不...

13122542396 ⋅ 05/25 ⋅ 0

读书笔记--Android Gradle权威指南(上)

最近看了一本书《Android Gradle 权威指南》,对于 Gradle 理解又更深了,但不想过段时间就又忘光了,所以打算写一篇读书笔记,将书中一些我个人觉得蛮有用的点记录、总结一下。 前言 首先,...

请叫我大苏 ⋅ 05/24 ⋅ 0

Android网络连接处理学习笔记

在Android中,可以有多种方式来实现网络编程: 创建URL,并使用URLConnection/HttpURLConnection 使用HttpClient 使用WebView 创建URL,并使用URLConnection/HttpURLConnection java.net.*下...

文艺小青年 ⋅ 2017/06/10 ⋅ 0

Echoprint系列--Android编译与调用

在Echoprint系列--编译中编译了源码,这次将Echoprint移植到Android平台并测试识别歌曲功能。 一、编译库 1、环境准备 Android NDK,我的是android-ndk-r10e 修改源码,把src中的.cxx的文件重...

jwzhangjie ⋅ 2015/06/10 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

JavaScript零基础入门——(八)JavaScript的数组

JavaScript零基础入门——(八)JavaScript的数组 欢迎大家回到我们的JavaScript零基础入门,上一节课我们讲了有关JavaScript正则表达式的相关知识点,便于大家更好的对字符串进行处理。这一...

JandenMa ⋅ 今天 ⋅ 0

sbt网络问题解决方案

转自:http://dblab.xmu.edu.cn/blog/maven-network-problem/ cd ~/.sbt/launchers/0.13.9unzip -q ./sbt-launch.jar 修改 vi sbt/sbt.boot.properties 增加一个oschina库地址: [reposit......

狐狸老侠 ⋅ 今天 ⋅ 0

大数据,必须掌握的10项顶级安全技术

我们看到越来越多的数据泄漏事故、勒索软件和其他类型的网络攻击,这使得安全成为一个热门话题。 去年,企业IT面临的威胁仍然处于非常高的水平,每天都会看到媒体报道大量数据泄漏事故和攻击...

p柯西 ⋅ 今天 ⋅ 0

Linux下安装配置Hadoop2.7.6

前提 安装jdk 下载 wget http://mirrors.hust.edu.cn/apache/hadoop/common/hadoop-2.7.6/hadoop-2.7.6.tar.gz 解压 配置 vim /etc/profile # 配置java环境变量 export JAVA_HOME=/opt/jdk1......

晨猫 ⋅ 今天 ⋅ 0

crontab工具介绍

crontab crontab 是一个用于设置周期性被执行的任务工具。 周期性执行的任务列表称为Cron Table crontab(选项)(参数) -e:编辑该用户的计时器设置; -l:列出该用户的计时器设置; -r:删除该...

Linux学习笔记 ⋅ 今天 ⋅ 0

深入Java多线程——Java内存模型深入(2)

5. final域的内存语义 5.1 final域的重排序规则 1.对于final域,编译器和处理器要遵守两个重排序规则: (1)在构造函数内对一个final域的写入,与随后把这个被构造对象的引用赋值给一个引用...

江左煤郎 ⋅ 今天 ⋅ 0

面试-正向代理和反向代理

面试-正向代理和反向代理 Nginx 是一个高性能的反向代理服务器,但同时也支持正向代理方式的配置。

秋日芒草 ⋅ 今天 ⋅ 0

Spring 依赖注入(DI)

1、Setter方法注入: 通过设置方法注入依赖。这种方法既简单又常用。 类中定义set()方法: public class HelloWorldOutput{ HelloWorld helloWorld; public void setHelloWorld...

霍淇滨 ⋅ 昨天 ⋅ 0

马氏距离与欧氏距离

马氏距离 马氏距离也可以定义为两个服从同一分布并且其协方差矩阵为Σ的随机变量之间的差异程度。 如果协方差矩阵为单位矩阵,那么马氏距离就简化为欧氏距离,如果协方差矩阵为对角阵,则其也...

漫步当下 ⋅ 昨天 ⋅ 0

聊聊spring cloud的RequestRateLimiterGatewayFilter

序 本文主要研究一下spring cloud的RequestRateLimiterGatewayFilter GatewayAutoConfiguration @Configuration@ConditionalOnProperty(name = "spring.cloud.gateway.enabled", matchIfMi......

go4it ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部