【问题标题】:Get null when generating JSONObject with String使用 String 生成 JSONObject 时获取 null
【发布时间】:2016-03-16 23:09:32
【问题描述】:

我现在正在使用 JUnit 尝试此代码。

try {
    JSONObject jsonObject = new JSONObject("{\"name\":\"foo\",\"id\":\"2\"}");
    String name = jsonObject.getString("name");
    Log.d(TAG, "name = " + name);
} catch (JSONException e) {
    e.printStackTrace();
}

我现在正在“Log.d...”处测试放置断点线,但 jsonObject 始终为空。 我的错误是什么?此代码在实际设备上没有问题。

【问题讨论】:

  • 看起来不错,其实。
  • 它的工作..你能添加例外或更多细节..
  • 我发现这段代码在实际设备上运行良好。这是使用 JUnit 调试时的问题。
  • 是的,它的工作..!!!
  • 完全正常工作。没有任何问题。

标签: java android json


【解决方案1】:

如果 JSON 格式不正确,您应该会收到错误消息,因此不确定为什么它会为空。

不过,为了以防万一,我个人会避免转义字符串中的引号并单独放置每个键值。

JSONObject jsonObject = new JSONObject();
jsonObject.put("name", "foo");
jsonObject.put("id", "2");

【讨论】:

  • 我在JUnit上试过这段代码,发现这个jsonObject也是空的。
【解决方案2】:

这个问题与我的 JUnit 环境有关。 我用这个配置。

testOptions {
    unitTests.returnDefaultValues = true
}

当我将此选项更改为 false 时,此测试调用错误类似于

java.lang.RuntimeException: Method put in org.json.JSONObject not mocked.

我可以找到一个使用 JSONObject 的测试不能用通常的方式进行测试。 很幸运。

谢谢大家对我的评论。

【讨论】:

  • 我可以通过导入 JSON 库来测试调用 JSONObject 的程序。有用的信息在这里stackoverflow.com/questions/29402155/…
  • 使用 robolectric 是更好的解决方案。它对我来说也很好用,不需要导入 JSON 库。
【解决方案3】:

Android JSON API 是 android 的一部分,它不是 Java API 的一部分。 即它们不能在 JVM 上运行,它们在 android 环境中运行。

如果您想使用 JSON API 进行单元测试,您需要在 build.gradle 文件中集成以下依赖项 android studio

testImplementation 'org.json:json:20140107'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    • 2021-10-30
    • 1970-01-01
    • 2018-02-18
    • 2015-07-10
    • 1970-01-01
    • 2018-09-11
    相关资源
    最近更新 更多