Android 使用 HTTP 访问网络
使用 HttpURLConnection
在過去,Android 上發送 HTTP 請求一般有兩種方式:HttpURLConnection 和 HttpClient,不過在 Android 6.0 系統中,HttpClient 被完全移除了,因此推薦使用 HttpURLConnection
// 創建一個 URL 對象,并傳入目標網絡地址 val url = URL("https://www.baidu.com") // 調用 openConnection() 方法即可獲取 HttpURLConnection 實例 val connection = url.openConnection() as HttpURLConnection // 設置 HTTP 請求所使用的方法 connection.requestMethod = "GET" // 連接超時毫秒數 connection.connectTimeout = 8000 // 讀取超時毫秒數 connection.readTimeout = 8000 // 獲取服務器返回的輸入流 val input = connection.inputStream // 關閉 HTTP 連接 connection.disconnection()另外,還需要聲明網絡權限,修改 AndroidManifest.xml 中的代碼
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.example.networktest"><uses-permission android:name="android.permission.INTERNET" />... </manifest>如果想要提交數據給服務器,只需將 HTTP 請求的方法改成 POST,并在獲取輸入流之前把要提交的數據寫出即可。每條數據都要以鍵值對的形式存在,數據與數據之前用 & 符號隔開
connection.requestMethod = "POST" val output = DataOutputStream(connection.outputStream) output.writeBytes("username=admin&password=123")使用 OkHttp
OkHttp 是由大名鼎鼎的 Square 公司開發的,在接口封裝上做得簡單易用,足以替代原生的 HttpURLConnection
在使用 OkHttp 之前,我們需要先在項目中添加 OkHttp 庫的依賴,編輯 app/build.gradle 文件,在 dependencies 閉包中添加如下內容:
dependencies {...implementation 'com.squareup.okhttp3:okhttp:4.1.0' }看一下 OkHttp 的用法
// 創建 OkHttpClient 實例 val client = OkHttpClient() // 創建 Request 對象 val request = Request.Builder().url("https://www.baidu.com").build() // 調用 newCall() 方法創建 Call 對象,并調用 execute() 方法發送請求并獲取響應 val response = client.newCall(request).execute() // 得到具體的返回內容 val responseData = response.body?.string()如果是發起一條 POST 請求,會比 GET 請求稍微復雜一點
// 構建一個 RequestBody 對象存放待提交的參數 val requestBody = FormBody.Builder().add("username", "admin").add("password", "123").build() // 調用 post 方法,并將 RequestBody 對象傳入 val request = Request.Builder().url("https://www.baidu.com").post(requestBody).build()網絡請求回調
在獲取到服務器響應的數據后,我們就需要對它進行解析和處理。OkHttp 提供了一個自帶的回調接口,它會幫助我們開啟一個子線程,然后在子線程中執行 HTTP 請求,并將最終的請求結果回調到 okhttp3.Callback
object HttpUtil {...fun sendOkHttpRequest(address: String, callback: okhttp3.Callback) {val client = OkHttpClient()val request = Request.Builder().url(address).build()client.newCall(request).enqueue(callback)} }我們在調用 sendOkHttpRequest() 方法的時候就可以這么寫
HttpUtil.sendOkHttpRequest(address, object : Callback {// 得到服務器返回的具體內容override fun onResponse(call: Call, response: Response) {...}// 對異常情況進行處理override fun onFailure(call: Call, e: IOException) {...} })總結
以上是生活随笔為你收集整理的Android 使用 HTTP 访问网络的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机专业可以考天文学研究生吗,天文学专
- 下一篇: Android UI库推荐