Почему мой объект Gson продолжает возвращать ноль? - PullRequest
0 голосов
/ 20 апреля 2020

Я пытаюсь проанализировать JSON данные в классе, но gson.fromJson(response, bitt::class.java) продолжает возвращать ноль.

class bitt(@SerializedName("result")val result: String) {
  val someVal: String = "string"
  fun method() {
    print("something")
  }
}

val response: String = "{'success':true,'message':'','result':'Im a sult'}"
println(response)
val gson = Gson()
val ticker = gson.fromJson(response, bitt::class.java)
println(ticker)

Что я здесь не так делаю?

Ответы [ 4 ]

1 голос
/ 20 апреля 2020

JSON всегда использует двойные кавычки ", а не одинарные кавычки '. Ваш response использует одинарные кавычки, поэтому он недействителен JSON.

Как и во многих других языках, вы можете использовать \", чтобы поместить двойные кавычки в строковый литерал:

val response: String = "{\"success\":true,\"message\":\"\",\"result\":\"I'm a result\"}"
0 голосов
/ 21 апреля 2020

тогда вам может понадобиться Coroutine

https://github.com/Kotlin/kotlinx.coroutines

data class bitt(val result: String = "") {
    val someVal: String = "string"
    fun method() {
        print("something")
    }
}

suspend fun getTicker(response: String) = Gson().fromJson(response, bitt::class.java)

fun yourMethod() {
    val response: String = "{'success':true,'message':'','result':'Im a sult'}"
    println(response)
    CoroutineScope(IO).launch {
        val ticker = getTicker(response)
        println(ticker)
    }

}

KotlinConf 2017 - Введение в сопрограммы от Романа Елизарова

0 голосов
/ 21 апреля 2020

Я полагаю, что потребуется много времени, прежде чем вы вернете результат, поэтому тикер все еще остается нулевым

, вы можете использовать kotlin сопрограммы для его обработки. или просто используйте обратный вызов, как это

data class bitt(val result: String = "") {
    val someVal: String = "string"
    fun method() {
        print("something")
    }
}

fun getTicker(response: String, onComplete: (bitt) -> Unit) {
    val ticker = Gson().fromJson(response, bitt::class.java)
    onComplete(ticker)
}

val response: String = "{'success':true,'message':'','result':'Im a sult'}"
println(response)
getTicker(response){ println(it) }
0 голосов
/ 20 апреля 2020

изменить на класс данных вместо класса

пример из вашего кода:

data class bitt(val result: String = "") {
    val someVal: String = "string"
    fun method() {
        print("something")
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...