Android基础程序设计第八章-网络技术_第1页
Android基础程序设计第八章-网络技术_第2页
Android基础程序设计第八章-网络技术_第3页
Android基础程序设计第八章-网络技术_第4页
Android基础程序设计第八章-网络技术_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第八章 网络技术8.1 WebView简介8.5 网络编程优化8.3 XML解析8.2 HTTP协议访问网络8.4 JSON解析8.6 实战演练故事汇8.7 小结8.1 WebView简介Android是由互联网巨头公司Google开发的,因此Android对网络功能的支持是必不可少的。作为开发者,需要考虑如何利用网络来编写更加出色的应用程序,像微信、QQ、微博等常见应用都会大量使用网络技术。在编辑程序时,我们根据特殊需求,有时需要在程序中展示网页。Android系统为了满足这样的需求,提供了WebView控件,我们可以通过这个控件在我们的应用程序中嵌入一个浏览器,轻松用于展示各种各样的网页。

2、8.1 WebView简介WebView的用法很简单,在布局activity_main.xml中添加控件获取WerbView的实例后,通过实例调用getSetting()方法设置浏览器属性,让WebView支持JavaScript脚本即可,因此调用setJavaScriptEnabled()方法。 /调用方法支持JavaScript脚本 wv.getSettings().setJavaScriptEnabled(true); /调用setWebViewClient()方法使目标网页在当前窗口显示 wv.setWebViewClient(new WebViewClient(); /设置打开网页内

3、容 wv.loadUrl();8.1 WebView简介为了能够让本程序使用网络功能,还需要声明网络访问权限,因此我们在清单文件AndroidMenifest.xml中添加权限声明:8.2 HTTP协议访问网络所谓的HTTP(Hyper Test Transfer Protocal)即超文本传输协议,它规定了浏览器和服务器之间互相通信的规则。它的工作原理比较简单,是一种请求/响应式的协议,当客户端向服务器发出一条HTTP请求,服务器收到请求后会返回一些数据给客户端,然后客户端再对比这些数据进行解析和处理即可。上一节案例中使用到的WebView控件,其实就是使用手机客户端访问百度服务器并发送了H

4、TTP请求,接着服务器分析出我们要访问的是百度的首页,接着做出响应并将百度首页数据返回给客户端中调用了手机浏览器内核的WebView并对返回数据进行解析,最终将页面展示出来。8.2.1 HttpURLConnection的基本用法在Android系统上发送HTTP请求一般有两种方式:HttpURLConection和HttpClientHttpClient方式存在API数量过多以及难扩展等缺点在Android 6.0之后此功能被移除弃用实际开发中,绝大多数的App都需要与服务器进行数据交换,也就是访问网络,此时需要首先获取到HttpURLConnection的实例:8.2 HTTP协议访问网络

5、URL url = new URL(); HttpURLConnection conn = (HttpURLConnection)url.openConnection(); conn.setRequestMethod(GET); /设置请求方式 conn.setConnectTimeout(2000); /设置超时时间 InputStream is = conn.getInputStream(); /获取服务器返回输入流 conn.disconnect(); /断开连接8.2.2 GET和POST请求方式获取到HttpURLConnection实例后,我们设置了HTTP请求所用的方法,常用的方

6、法主要有两个:GET和POSTGET表示希望从服务器那里获取数据POST则表示希望提交数据给服务器8.2 HTTP协议访问网络GET方式提交数据GET方式是以实体方式得到由请求URL所指向的资源信息,它向服务器提交的参数跟在请求URL后面/用户名及密码拼在指定路径后面并进行编码String path = 11:8080/web/LoginServlet?username= + URLEncoder.encode(zhangsan) + &pswd = + URLEncoder.encode(admin); URL url = new URL(path); /创建URL对象 HttpURLCon

7、nection conn = (HttpURLConnection)url.openConnection(); conn.setRequestMethod(GET); /设置请求方式 conn.setConnectTimeout(2000); /设置超时时间 int responseCode = conn.getResponseCode(); /获取状态码 if(responseCode=200) /访问成功返回200,否则一般为404或400 InputStream is = conn.getInputStream(); /获取服务器输入流 8.2 HTTP协议访问网络8.1 WebView

8、简介POST方式提交数据使用POST方式向服务器发送请求时,需要在请求后面附加实体。它向服务器提交的参数在请求后的实体中且POST方式请求对URL的长度没有限制。String path = 11:8080/web/LoginServlet; URL url = new URL(path); HttpURLConnection conn = (HttpURLConnection)url.openConnection(); conn.setRequestMethod(POST); /设置请求方式 conn.setConnectTimeout(2000); /设置超时时间/准备数据并为数据进行编码

9、String info = username= + URLEncoder.encode(zhangsan) + &pswd= + URLEncoder.encode(admin); /设置请求头数据提交方式,此处为form表单方式 conn.setRequestProperty(Content-Type,application/x-www-form-urlencoded); /设置请求头以及调教数据长度 conn.setRequestProperty(Content-Length,info.length() + ); /使用POST方式将数据写给服务器,参数为true表示允许向外写数据 con

10、n.setDoOutput(true); /创建输出流向服务器写数据 OutputStream os = conn.getOutputStream(); os.write(info.getBytes(); int responseCode = conn.getResponseCode(); if(responseCode=200) InputStream is = conn.getInputStream(); 8.2.3 实战演练23功能描述:技术要点:编辑布局编辑逻辑代码,点击按钮发送请求开启线程模式发送POST以及GET形式请求案例代码(详见教材P182P185)实现步骤: 请求响应 使用

11、HttpHRLConnection的post形式发送请求使用HttpHRLConnection的get形式发送请求18.2 HTTP协议访问网络8.2.4使用OkHttp访问网络 在实际开发中,使用Android自带的API与服务器通信并不是非常方便,我们也不是只能使用HttpURLConnection进行网络通信,许多出色的网络通信库都可以替代原生的HttpURLConnection,其中OkHttp就是出色的一个。 OkHttp是由Square公司开发的,OkHttp不仅在接口封装上简单易用,在底层实现也自成一派,已经成为目前Android开发者首选的网络通信库。我们接下来将具体讲解OkH

12、ttp的用法,OkHttp项目的地址是:/square/okhttp。8.2 HTTP协议访问网络添加依赖库首先创建OkHttpClient实例8.2 HTTP协议访问网络dependencies implementation fileTree(include: *.jar, dir: libs) androidTestImplementation com.android.support.test.espresso:espresso-core:3.0.2 implementation com.squareup.okhttp3:okhttp:3.13.1OkHttpClient okHttpCl

13、ient = new OkHttpClient();发送HTTP请求,因此需要创建请求对象调用build()方法前连缀url()方法来丰富这个Request对象,设置目标网址地址通过OkHttpClient对象调用newCall()方法来创建Call对象,并使用这个对象调用execute()方法来发送请求并获取服务器返回数据Response对象就是服务器返回数据,可以通过下列方式获取具体服务器返回内容8.2 HTTP协议访问网络Request request = new Request.Builder().build();Request request = new Request.Builde

14、r().url().build();Response response = okHttpClient.newCall(request).execute(); String responseData = response.body().string();如果使用POST发送请求的话,我们需要构建一个RequestBody对象用来存放要提交的数据在Request.Builder中调用post()方法将RequesBody对象传入即可8.2 HTTP协议访问网络RequestBody requestBody = new FormBody.Builder() .add(username,root) .

15、add(pswd,admin) .build();Request request1 = new Request.Builder() .url() .post(requestBody) .build();8.2 HTTP协议访问网络public class MainActivity extends AppCompatActivity implements View.OnClickListener Override public void onClick(View v) if(v.getId() = R.id.btn_send)/ sendRequestWHttpURLConnection();

16、sendRequestWOkHttp(); private void sendRequestWOkHttp() new Thread(new Runnable() Override public void run() try OkHttpClient okHttpClient = new OkHttpClient(); Request request = new Request.Builder().url().build(); Response response = okHttpClient.newCall(request).execute(); String responseData = r

17、esponse.body().string(); showResponse(responseData); catch (Exception e) e.printStackTrace(); ).start(); 8.3 XML解析 当前网络上传输数据时常用的格式有两种:XML和JSON。首先我们来学习一下XML格式数据的解析。XML文件现有解析方式有3种,分别是Pull解析、SAX解析以及DOM解析,比较常用的是Pull解析与SAX解析8.3 XML解析8.3.1 PULL解析Pull解析是一个开源的Java项目,既可以用于Android应用,也可以用于JavaEE程序,Android已经集成了

18、Pull解析器。使用Pull解析XML文档时,首先要创建XmlPullParser解析器,下面我们来了解一下XmlPullParser的常用属性:XmlPullParser.START_DOCUMENT:XML文档的开始XmlPullParser.END_DOCUMENT:XML文档的结束。XmlPullParser.START_TAG:开始节点,在XML文件中,除了文本之外,带有尖括号的都是开始节点,如.XmlPullParser.END_TAG:结束节点,带有都是结束节点,如。8.3 XML解析8.3.2 SAX解析方式XML解析中除了Pull解析以外,SAX解析也是一种非常实用的解析方式

19、,但是解析方式相比Pull解析要复杂一些,语义更清楚。使用SAX解析时都会新建一个类继承自DefaultHandler类,并重写5个方法:tartDociment()方法在XML开始解析的时候调用startElement()方法在解析执行到文档的某个节点的时候调用characters()方法会在解析节点时获取节点内容的时候调endElement()方法会在完成节点解析的时候调用endDocument()方法会在完成整个XML文档解析的时候调用8.4 JSON解析 JSON是最近几年流行的一种新的数据格式,与XML非常相似,都是用来存储数据的,但是相比XML,JSON的主要优势在于它的体积小、解

20、析速度快以及占用空间小,在网络上传输的时候可以节省流量。但同时也存在一些缺点,它的语义性较差,看起来没有xml直观。8.4 JSON解析8.4.1 JSON数据JSON即JavaScript Object Notation(对象表示法),是一种轻量级的数据交换格式,他是基于JavaScript的一个子集,使用了类似于C语言家庭的习惯(包括C、C+、C#、Java、JavaScript、Python等)JSON也是基于纯文本的数据格式,并且JSON的数据格式非常简单,初学者可以使用JSON传输一个简单的String、Number、Boolean,也可以传输数组或者复杂的Object对象。8.4

21、JSON解析8.4.1 JSON数据JSON有下列两种数据格式:对象结构数组结构8.4 JSON解析8.4.2 使用org.json解析JSON数据Android SDK中为开发者提供了org.json用来解析JSON数据由于JSON数据只有JSON对象和JSON数组两种结构,因此org.json包提供了JSONObject和JSONArray两个类对JSON数组进行解析。要解析的JSON数据如下所示:使用JSONObject解析JSON对象“name”:”Lucy”,”age”:30,”married”:true /json1 对象形式16,2,26 /json2 数组形式JSONObjec

22、t jsonObj = new JSONObject(json1);String name = jsonObj.optString(“name”);int age = jsonObj.optInt(“age”);boolean married = jsonObj.optBpplean(“married”);8.4 JSON解析使用JSONArray解析JSON数组JSONArray jsonArray = new JSONArray(json2);for(int i=0;ijsonArray.length();i+) int age = jsonArray.optint(i);8.4 JSON解析例如下列数据:需要解析的是JSON数组的话,借助TypeToken类将期望解析成的数据类型传入到fromJson()方法中,过程如下

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论