11.1 WebView的用法
用于在应用程序中展示一些网页,借助WebView控件,我们可以在自己的应用程序中嵌入一个浏览器。
<WebView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/webView"/>
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
webView.settings.setJavaScriptEnabled(true)
webView.webViewClient = WebViewClient()
webView.loadUrl("https://www.baidu.com")
}
通过webView的getSrttings()方法可以设置一些浏览器的属性;
此处调用setJavaScriptEnabled()方法,让WebView支持JavaScript脚本。
随后调用WebView的setWebViewClient()方法 ,传入了一个WebViewClient的实例 ;用途 : 当需要从一个网页跳转到另一个网页时,我们希望目标网页仍然在当前的WebView中显示,而不打开系统浏览器。
最后调用了loadUrl()方法,传入网址即可展示相应的网页内容。
需要申请网络权限
11.2 使用Http访问网络
11.2.1 使用HttpURLConnection
首先需要获取HttpURLConnection的实例,创建一个URL对象,传入目标的网络地址,然后调用openConnection()方法。
var connection : HttpURLConnection?=null
val url=URL("https://www.baidu.com") //创建URL对象
connection= url.openConnection() as HttpURLConnection
connection.requestMethod="GET" //设置HTTP请求所使用的方法 GET 和 POST
onnection.connectTimeout=8000 //设置连接超时
connection.readTimeout = 8000 //设置读取超时
11.2.2 使用OkHttp
使用开源库OkHttp网络通信库:(OkHttp的项目主页地址:https://github.com/square/okhttp)
使用之前需要添加OkHttp库的依赖;在app/build.gradle文件中的dependencies闭包中添加。
Okhttp的用法
- 首先需要创建一个OkHttpClient的实例
val client =OkHttpClient()
- 发起一条HTTP请求,需要创建一个Request对象:可以通过url()方法来设置目标的网络地址。
val request = Request.Builder()
.url("https://www.baidu.com")
.build()
-
调用OkHttpClient 的 newCall() 方法来创建一个Call 对象,并调用它的execute() 方法 来发送请求并获取服务器返回的数据。
val resopnse = client.newCall(request).execute()
-
Resonse 对象就是服务器返回的数据,可以用如下写法来得到返回的具体内容:
val responseData = response.body?.string()
-
如果发送POST请求,我们需要先构建一个Request Body 对象来存放待提交的参数 :
//发送一条 post请求 先构建RequestBody 对象存放待提交的参数
val requestBody = FormBody.Builder()
.add("username","admin")
.add("password","123456")
.build()
//然后在Request.Builder 中调用post() 方法 并将RequestBody对象传入
val request = Request.Builder()
.url("https://www.biadu.com")
.build()
完整的GET实现:
val client = OkHttpClient()
val request = Request.Builder()
.url("https://www.baidu.com")
.build()
val response = client.newCall(request).execute()
val responseData = response.body?.string()
showResponse(responseData.toString())