在项目中我们常常会把一些配置文件放在src/main/assets或src/main/res/raw目录下,然后在程序运行的时候读取出来使用,随手就写了一个读取assets/raw目录下文件的帮助类,代码比较简单,如下:
import android.content.Context
import androidx.annotation.RawRes
import com.google.gson.reflect.TypeToken
import java.io.*
object AssetHelper {
/**
* 读取src/main/assets目录下json文件,转换成对应的bean
*/
inline fun <reified T> readJsonFromAssets(context: Context, fileName: String): T {
val inputStream = context.assets.open(fileName)
val json = String(inputStream.readBytes())
inputStream.close()
return GsonHelper.fromJson(json, T::class.java) as T
}
/**
* 读取src/main/assets目录下json文件,转换成对应的List
*/
inline fun <reified T> readJsonArrayFromAssets(context: Context, fileName: String): T {
val inputStream = context.assets.open(fileName)
val json = String(inputStream.readBytes())
inputStream.close()
return GsonHelper.fromJson(json, object : TypeToken<T>() {}.type) as T
}
/**
* 读取src/main/res/raw目录下json文件,转换成对应的bean
*/
inline fun <reified T> readJsonFromRaw(context: Context, @RawRes id: Int): T {
val inputStream = context.resources.openRawResource(id)
val json = String(inputStream.readBytes())
inputStream.close()
return GsonHelper.fromJson(json, T::class.java) as T
}
/**
* 读取src/main/res/raw目录下json文件,转换成对应的List
*/
inline fun <reified T> readJsonArrayFromRaw(context: Context, @RawRes id: Int): T {
val inputStream = context.resources.openRawResource(id)
val json = String(inputStream.readBytes())
inputStream.close()
return GsonHelper.fromJson(json, object : TypeToken<T>() {}.type) as T
}
}
对应的GsonHelper类为
object GsonHelper {
private val gson = Gson()
fun <T> fromJson(json: String?, clazz: Class<T>): T? {
try {
return gson.fromJson(json, clazz)
} catch (e: Exception) {
e.printStackTrace()
}
return null
}
fun <T> fromJson(json: String?,type: Type):T= gson.fromJson(json, type)
}
网友评论