Android网络技术
申请网络权限
使用WebView控件显示网页
使用Http协议访问网络
HttpURLConnection
1.首先需要获取到HttpURLConnection的实例,一般只需new出一个URL对象,并传入目标的网络地址,
然后调用一下openConnection()方法即可,在得到了HttpURLConnection的实例之后,
我们可以设置一下HTTP请求所使用的方法,常用的方法主要有两个GET和POST,GET表示希望从服务器那里获取数据,而POST则表示希望提交数据给服务器,接下来就可以进行一些自由的定制了,比如设置链接超时,读取超时的毫秒数,以及服务器希望得到的一些消息头等,这部分内容根据自己的实际情况进行编写。
2.之后再调用getInputStream()方法就可以获取到服务器返回的输入流了,剩下的任务就是对输入流进行读取。
3.最后可以调用disconnect()方法将这个HTTP链接关闭掉。
4.那么如果是想要提交数据给服务器应该怎么办呢?其实也不复杂,只需要将HTTP请求的方式改成POST,并在获取输入流之前把要提交的数据写出即可,注意每条数据都要以键值对的形式存在,数据与数据之间用"&"符号隔开,比如说我们想要向服务器提交用户名和密码:
【问题】
在使用HttpURLConnection访问http://www.baidu.com时无法获取数据
原来百度的网址全部换为https://www.baidu.com,但我们在PC端浏览器中使用http://www.baidu.com,会有302页面自动帮我们跳转到https的主页,所以,我们可以使用http://www.baidu.com访问https://www.baidu.com的百度主页。然而,Android的HttpURLConnection只能和http网页通信,所以不能跳转到https的网址。
【解决办法】
1.将原书中网址http://www.baidu.com替换为https://www.baidu.com
2.将HttpURLConnection全部替换为HttpsURLConnection。
OkHttp
可以看出使用HttpURLConnection比较繁琐,我们可以使用当前流行的OkHttp网络通信库代替它。
1.在使用Okhttp之前,需要在项目中添加依赖项
2.声明一个OkHttpClient,创建Request对象, 调用OKHttpClient中的newCall()方法创建Call对象,调用他的execute方法发送请求并获取服务端返回的数据(GET请求方式)
3.Post请求
构建Requestbady对象来存放待提交的参数,然后在Request.Builder中调用post方法,并将Requestbady对象传入,接下来 调用他的execute方法发送请求并获取服务端返回的数据。
解析XML
Pull解析:
1.获取XmlPullParserFactory实例,并借助这个实例得到XmlPullParser对象,然后调用setInput方法将服务器返回的XML数据设置进去进行解析。
2.通过getEventType获得当前解析事件,然后在while循环中不断解析,解析完一个事件,调用next获取下一解析事件。通过getName获取节点名,nextText获取节点内容。
SAX解析
新建类继承DefaultHandler ,重写父类5个方法:
startDocumnet在XML开始解析式调用(初始化工作)
startElement在开始解析某个节点时调用;
characters方法解析具体节点内容(注意处理换行符)
endElement方法完成解析某个节点
endDocument方法完成整个XML解析
SAX和Pull的区别:
SAX解析器的工作方式是自动将事件推入事件处理器进行处理,因此你不能控制事件的处理主动结束;
而Pull解析器的工作方式为允许你的应用程序代码主动从解析器中获取事件,正因为是主动获取事件,因此可以在满足了需要的条件后不再获取事件,结束解析。
解析JSON
JSONObject
循环遍历jsonArray数组,取出的每个元素都是jsonObject,直接可以获得其中的属性
GSON
1.使用GSON之前先导入依赖
2.创建对象实体类
若解析单个对象,直接可以调用
若解析数组,借助TypeToken类来实现
发送网络请求的通用Http工具类:HttpUtils
回调用的接口: