【发布时间】:2020-03-01 20:40:34
【问题描述】:
我在 assets 文件夹中保存了一些 json 数据。我使用此代码读取并将其处理为我创建的数据类:
fun getJsonDataFromAssets(context: Context, fileName: String): String =
context.assets.open(fileName).bufferedReader().use { it.readText() }
inline fun <reified T> extractJsonData(context: Context, jsonName: String): List<T> {
val jsonList = JSONArray(getJsonDataFromAssets(context, jsonName))
val gson = Gson()
val extractedList = mutableListOf<T>()
for (i in 0 until jsonList.length()) {
val jsonObject = jsonList.getJSONObject(i).toString()
val elementOfT = gson.fromJson(jsonObject, T::class.java)
extractedList.add(elementOfT)
}
return extractedList
}
然后我使用以下代码将这些数据类添加到我的房间数据库回调中:
private class DatabaseCallback(
private val context: Context,
private val scope: CoroutineScope
) :
RoomDatabase.Callback() {
override fun onCreate(db: SupportSQLiteDatabase) {
super.onCreate(db)
instance?.let { database ->
scope.launch {
val ownerDao = database.ownerDao()
val dogDao = database.dogDao()
val catDao = database.catDao()
initializeList("owner.json", ownerDao)
initializeList("dog.json", dogDao)
initializeList("cat.json", catDao)
}
}
}
suspend inline fun <reified T> initializeList(jsonName:String, dao: IDao<T>) {
val jsonList = extractJsonData<T>(context, jsonName)
dao.addAllT(jsonList)
}
}
在我的主要活动中,我观察 Livedata 并在应用启动后使用它来填充回收视图。但是,这会使 recyclerview 空白一段时间。
在创建数据库之前如何添加进度条或其他内容?
【问题讨论】:
标签: android json mvvm android-room