【问题标题】:Null values parsing with GSON on Android/Kotlin在 Android/Kotlin 上使用 GSON 解析空值
【发布时间】:2020-10-28 20:34:27
【问题描述】:

我正在尝试使用 GSON 在 Android/Kotlin 应用程序中解析 JSON。当我运行此代码时, foobarjsonString 都为空。我错过了什么?

    var gson = Gson()

    data class Foobar( val foo: String )

    val foobar = gson.fromJson("""{"foo":"bar"}""",Foobar::class.java)
    val jsonString = gson.toJson(Foobar("bar"))

【问题讨论】:

  • 请您在您的帖子中包含更多代码,您如何/在哪里调用它?它似乎对我有用
  • 它几乎是在一个普通 Android 应用的 onCreate() 中运行的唯一代码

标签: android json kotlin gson


【解决方案1】:

利用基本单元测试:

class ExampleUnitTest {

    @Test
    fun fooTest() {

        var gson = Gson()

        data class Foobar( val foo: String )

        val foobar = gson.fromJson("""{"foo":"bar"}""",Foobar::class.java)
        val jsonString = gson.toJson(Foobar("bar"))

        assertEquals(null, foobar)
        assertEquals(null, jsonString)
    }
}

此测试失败:

Expected :null<null> 
Actual   :java.lang.String<null>

将类移到方法之外:

data class Foobar( val foo: String )

@Test
fun fooTest() {

    var gson = Gson()


    val foobar = gson.fromJson("""{"foo":"bar"}""",Foobar::class.java)
    val jsonString = gson.toJson(Foobar("bar"))

    assertEquals(null, foobar)
    assertEquals(null, jsonString)
}

Expected :null
Actual   :Foobar(foo=bar)

还有

Expected :null
Actual   :{"foo":"bar"}

这是一件好事,这意味着我们期望它为空,但测试失败了,因为我们的变量实际上有值。您的问题是由方法内部的数据类引起的,在您的情况下,此方法是 onCreate,将其移出即可解决问题

【讨论】:

  • 感谢您的快速回复。这行得通。我花了几个小时试图找出这里出了什么问题!
  • 我认为我没有足够的声誉来标记答案:(
【解决方案2】:

由于这段代码都在 Android 类(Main Activity)的 onCreate() 方法中,Foobar::class.java没有考虑 Foobar 类嵌套在 MainActivity 类中的事实。所以,这也是一个修复:

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {

        ...
        
        var gson = Gson()

        data class Foobar( val foo: String )

        val foobar = gson.fromJson(
                     """{"foo":"bar"}""",
                     MainActivity.Foobar::class.java)

        val jsonString = gson.toJson(Foobar("bar"))

        ...
    }
}

【讨论】:

    猜你喜欢
    • 2018-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多