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())