- 創(chuàng)建 assets 配置文件
- 使用 AssetManager 讀取配置文件內(nèi)容
- 使用 fastjson 解析配置文件內(nèi)容
??這是一個簡單而實用的小需求,在 App 開發(fā)的過程中往往需要經(jīng)歷,開發(fā)、測試、發(fā)布等各個階段,在每一個階段使用的 數(shù)據(jù)請求地址,App信息往往是不同的末誓,這個時候使用一個配置文件將這些信息統(tǒng)一管理起來就顯得很必要。
一书蚪、創(chuàng)建 assets 配置文件
- 創(chuàng)建 assets 文件夾喇澡,位置 src -> main 下,如圖:
- 在 assets 文件夾下創(chuàng)建配置文件
config.json
殊校,內(nèi)容如下:
{
"isDebug": true,
"debug": {
"hostUrl": "https://www.hao123.com",
"flag": "test"
},
"release": {
"hostUrl": "https://www.baidu.com",
"flag": "online"
}
}
二晴玖、使用 AssetManager 讀取配置文件內(nèi)容
創(chuàng)建工具文件 AssetsUtil.kt
,內(nèi)容如下:
@file:JvmName("AssetsUtil") // 1??
package cn.ak.kot
import android.content.Context
import java.io.BufferedInputStream
/**
* 讀取assets中的【文本文件】內(nèi)容
*/
fun <R> readText4Assets(ctx: Context, fileName: String, callback: (String?) -> R): R { // 2??
var text: String? = null
try {
ctx.assets.open(fileName).use { ins -> // 3??
BufferedInputStream(ins).use { bis ->
text = bis.reader().readText()
}
}
} finally { // 4??
return callback(text)
}
}
涉及 Kotlin 知識點:
- 1??Java調(diào)用Kotlin
- 2??泛型函數(shù)为流、函數(shù)類型
- 3??自動資源管理
- 4??finally 代碼塊
三呕屎、使用 fastjson 解析配置文件內(nèi)容
-
build.gradle
中引入fastjson
,如下:
dependencies {
......
implementation 'com.alibaba:fastjson:1.2.58'
}
- 使用
readText4Assets()
得到配置內(nèi)容敬察,并解析:
fun readConfig() {
readText4Assets(this, "config.json") { // 1??
it ?: return@readText4Assets // 2??
JSON.parseObject(it).run { // 3??
Configuration().run {
isDebug = getBoolean("isDebug")
val hostInfo = getString(if (isDebug) "debug" else "release") // 4??
JSON.parseObject(hostInfo).run {
hostUrl = getString("hostUrl")
flag = getString("flag")
}
Log.e("readConfig", toString())
}
}
}
}
涉及 Kotlin 知識點:
- 1??尾隨 Lambda 表達式
- 2??Elvis運算符
- 3??內(nèi)聯(lián)函數(shù)