(学习参考书:第一行代码第2版)
借助WebView控件,我们可以在自己的应用程序中嵌入一个浏览器,从而展示各种各样的网页。使用方法如下:
工作原理为客户端向服务器发出一条HTTP请求,服务器收到请求之后会返回一些数据给客户端,客户端吧再对这些数据进行解析和处理。
(1)使用HttpURLConnection
首先获取到HttpURLConnection的实例,一般是new一个URL对象,传入目标的网络地址,然后调用你openConnection()即可
URL url = new URL("http://www.baidu.com");
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
得到HttpURLConnection的实例后,可以设置以下HTTP请求所使用的方法。常用的方法主要有两个:GET和POST。GET表示从服务器那里获取数据,POST表示希望提交数据给服务器。
connection.setRequestMethod("GET");
接下来进行一些自由定制,比如设置连接超时、读取超时的毫秒数、服务器希望得到的一些消息头等。如:
connection.setConnectTimeout(8000);
connection.setReadTimeout(8000);
之后调用getInputStream()方法就能获取到服务器返回的输入流了,剩下的任务就是读取。
InputStream in = connection.getInputStream();
最后调用disconnect()方法将这个HTTP连接关闭掉
connection.disconnect();
如果是想给服务器提交数据,,只需要将请求方法改为POST,并在获取输入流之前把要提交的数据写出即可。每条数据都要以键值对的形式存在,数据和数据之间用&隔开。
(2)使用OkHttp
使用OkHttp之前,需要在项目在项目中添加OkHttp库的依赖。在app/build.gradle文件的dependencies闭包下添加如下内容:
implementation("com.squareup.okhttp3:okhttp:4.9.1")
最新版本号可通过OkHttp的项目主页地址获取:
https://github.com/square/okhttp
添加如上以来系统会下载两个库,一个是OkHttp库,一个是Okio库,后者是前者的通信基础。OkHttp具体用法如下:
//1
OkHttpClient client = new OkHttpClient();
//2,3
Request requestGet = new Request.Builder()
.url("http://www.baidu.com")
.build();
//4
Response responseGet = client.newCall(requestGet).execute();
//5
String responseData = responseGet.body().string();
//6
RequestBody requestBody = new FormBody.Builder()
.add("name","admin")
.add("password","123456")
.build();
//7
Request requestPost = new Request.Builder()
.url("http://www.baidu.com")
.post(requestBody)
.build();
//8
Response responsePost = client.newCall(requestPost).execute();
程序一般会在网络上传输格式化后的数据,这些数据会有一定的结构规格和语义,当另一方收到数据消息之后就可以按照相同的结构规格进行解析,从而取出他想要那部分内容。
在网络上传输数据的常用格式有两种:XML和JSON;主流是JSON格式。
(1)使用JSONObject
(2)使用GSON
GSON是谷歌提供的开源库,使用前必须在项目中添加GSON库的依赖。在dependencies闭包下添加:
implementation 'com.google.code.gson:gson:2.8.6'
最新的版本通过官网查询:
https://github.com/google/gson
GSON可以将一段JSON格式的字符串自动映射成一个对象,从而不需要手动编写代码进行解析。
如果一段json格式如:{“name”:”Tom”,”age”:”20”}
那么可以定义一个Person类,加入name和age两个字段,然后只需要简单调用如下代码就可以将JSON数据自动解析为一个Person对象:
Gson gson = new Gson();
Person person = gson.fromJson(jsonData,Person.class);
如果是解析一段JSON数组需要借助TypeToken将期望解析成的数据类型出传入到fromJson()方法中
List<Person> people = gson.fromJson(jsonData,new TypeToken<List<Person>>(){
}.getType());