如何使用 Kotlin 从 android 中的资产中读取 json 文件?
Posted
技术标签:
【中文标题】如何使用 Kotlin 从 android 中的资产中读取 json 文件?【英文标题】:How to read json file from assests in android using Kotlin? 【发布时间】:2019-11-19 14:28:29 【问题描述】:我已经使用过 java,但发现使用 Kotlin 很困难。
我已经用谷歌搜索过,但它们都不适合我。
/**
* Get the json data from json file.
*
* @param context the context to acces the resources.
* @param fileName the name of the json file
* @return json as string
*/
public static String getJsonFromAsset(Context context, String fileName)
String json = "";
try
InputStream stream = context.getAssets().open(fileName);
int size = stream.available();
byte[] buffer = new byte[size];
stream.read(buffer);
stream.close();
json = new String(buffer, "UTF-8");
catch (Exception e)
e.printStackTrace();
return json;
我想要 Kotlin 中的这段代码。
【问题讨论】:
【参考方案1】:从 Kotlin 的 assets 文件夹中读取 json 文件非常简单,只需使用以下代码
val fileInString: String =
applicationContext.assets.open(fileName).bufferedReader().use it.readText()
【讨论】:
【参考方案2】:Java 代码也可以从 android Studio 转换为 Kotlin。 这是Context扩展功能的转换解决方案。
@Throws(IOException::class)
fun Context.readJsonAsset(fileName: String): String
val inputStream = assets.open(fileName)
val size = inputStream.available()
val buffer = ByteArray(size)
inputStream.read(buffer)
inputStream.close()
return String(buffer, Charsets.UTF_8)
【讨论】:
【参考方案3】:你可以使用下面的
class LocalJSONParser
companion object
fun inputStreamToString(inputStream: InputStream): String
try
val bytes = ByteArray(inputStream.available())
inputStream.read(bytes, 0, bytes.size)
return String(bytes)
catch (e: IOException)
return ""
// jsonFileName = "data.json"
inline fun <reified T> Context.getObjectFromJson(jsonFileName: String): T
val myJson =LocalJSONParser.inputStreamToString(this.assets.open(jsonFileName))
return Gson().fromJson(myJson, T::class.java
【讨论】:
以上是关于如何使用 Kotlin 从 android 中的资产中读取 json 文件?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Kotlin 在 android 中的 BottomNavigationView 上设置 OnNavigationItemListener?
如何在 Android Studio 中使用 Kotlin 从 Firebase 中的数据库中获取特定值?
如何将偏移量应用于 android (Kotlin) 中的 Contacts Provider 查询?
如何从 Kotlin Android 中的 LinkedHashMap 手动获取第一和第二位置的对象?
如何从 Firebase android kotlin 获取所有具有特定价值的孩子?
使用 Kotlin 从 Android 上 ViewModel 中的 LiveData 更新 ListView 中的元素