我已经使用过Java,但是使用Kotlin却很困难。
我已经在Google搜索过,但是没有一个对我有用。
/**
* 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中的这段代码。
答案 0 :(得分:0)
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)
}
答案 1 :(得分:0)
从Kotlin的Assets文件夹中读取json文件非常容易,只需使用以下代码即可
val fileInString: String =
applicationContext.assets.open(fileName).bufferedReader().use { it.readText() }
答案 2 :(得分:0)
您可以使用以下
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
}