# 网络技术

# 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")
}
最后更新: 2022/9/12 16:01:28