# 网络技术
# Retrofit
Retrofit 是 基于 OkHttp 封装出来的应用层网络通讯库
# 增加依赖
app\build.gradle
dependencies {
implementation 'com.squareup.retrofit2:retrofit:2.6.1'
implementation 'com.squareup.retrofit2:converter-gson:2.6.1'
}
# OkHttp
OkHttp 是 Square 公司开发的网络库,侧重于底层通讯
# 增加网络权限
AndroidManifest.xml
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
# 增加依赖
app\build.gradle
dependencies {
implementation 'com.squareup.okhttp3:okhttp:4.1.0'
}
# 使用
thread {
try {
val clent = OkHttpClient()
val request = Request.Builder()
.url("网址")
.build()
val response = clent.newCall(request).execute()
val resultSetMetaData = response.body?.string()
if (resultSetMetaData != null) {
runOnUiThread {
// 在这里进行UI操作,将结果显示到界面上
var text = resultSetMetaData
}
}
} catch (e: Exception) {
e.printStackTrace()
}
}
# POST 传参
val responseBody = FormBody.Builder()
.add("参数1","值")
.add("参数2","值")
.build()
val request = Request.Builder()
.url("网址")
.post(responseBody)
.build()
# HttpURLConnection
HttpURLConnection 是 Android 原生自带的网络库,有点过于复杂
# 增加网络权限
AndroidManifest.xml
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
# 使用
// 开启线程来发起网络请求
thread {
var connection: HttpURLConnection? = null
try {
val response = StringBuilder()
val url = URL("网址")
connection = url.openConnection() as HttpURLConnection
//传参(可选)
connection.requestMethod = "POST"
val output = DataOutputStream(connection.outputStream)
output.writeBytes("参数1=值&参数2=值")
connection.connectTimeout = 5000
connection.readTimeout = 5000
val input = connection.inputStream
// 下面对获取到的输入流进行读取
val reader = BufferedReader(InputStreamReader(input))
reader.use {
reader.forEachLine {
response.append(it)
}
}
runOnUiThread {
// 在这里进行UI操作,将结果显示到界面上
var text = response.toString()
}
} catch (e: Exception) {
e.printStackTrace()
} finally {
connection?.disconnect()
}
}
# 解析 Json
# GSON
GSON 是 Google 开发的 Json 解析库
# 增加依赖
app\build.gradle
dependencies {
implementation 'com.google.code.gson:gson:2.8.5'
}
# 使用
var text = """[
{"id":"5","version":"5.5","name":"Clash of Clans"},
{"id":"6","version":"7.0","name":"Boom Beach"},
{"id":"7","version":"3.5","name":"Clash Royale"}
]""".trimIndent()
val gson = Gson()
val typeOf = object : TypeToken<List<App>>() {}.type
val appList = gson.fromJson<List<App>>(text, typeOf)
for (app in appList) {
Log.d("MainActivity", "id: ${app.id}")
Log.d("MainActivity", "name: ${app.name}")
Log.d("MainActivity", "version: ${app.version}")
}
class App(val id: String, val name: String, val version: String)
# JSONObject
JSONObject 是 Android 原生自带的 Json 解析库
var JsonData = """[
{"id":"5","version":"5.5","name":"Clash of Clans"},
{"id":"6","version":"7.0","name":"Boom Beach"},
{"id":"7","version":"3.5","name":"Clash Royale"}
]""".trimIndent()
val JsonArray = JSONArray(JsonData)
for(i in 0 until JsonArray.length()){
val jsonObject = JsonArray.getJSONObject(i)
var id = jsonObject.getString("id")
var name = jsonObject.getString("name")
var version = jsonObject.getString("version")
Log.d("MainActivity","id: $id")
Log.d("MainActivity","name: $name")
Log.d("MainActivity","version: $version")
}
← 界面布局