Как прочитать файл JSON из ассетов в Android с помощью Kotlin? - PullRequest
0 голосов
/ 10 июля 2019

Я уже сделал с 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.

Ответы [ 3 ]

0 голосов
/ 10 июля 2019

Чтение JSON-файла из папки активов в Kotlin очень просто, просто используйте следующий код

val fileInString: String =
  applicationContext.assets.open(fileName).bufferedReader().use { it.readText() }
0 голосов
/ 11 июля 2019

Вы можете использовать следующее

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
}
0 голосов
/ 10 июля 2019

Java-коды также можно конвертировать в Kotlin из Android Studio. Вот преобразованное решение с функцией расширения 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)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...