在使用字符串生成JSONObject时,出现null。

12 浏览
0 Comments

在使用字符串生成JSONObject时,出现null。

我现在正在使用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始终为null。

我犯了什么错误?这段代码在实际设备上没有问题。

0
0 Comments

这个问题是与我的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库。

0
0 Comments

当使用字符串生成JSONObject时,如果出现问题而返回null,可能的原因是JSON格式不正确。为了避免这个问题,可以尝试避免在字符串中转义引号,并将每个键值对分别放入JSONObject中。

下面是一个示例代码:

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

我在JUnit上尝试了这段代码,并发现jsonObject也是null。

0
0 Comments

在使用Android的JSON API时,可能会遇到生成JSONObject时返回null的问题。这是因为Android的JSON API是Android的一部分,而不是Java的一部分。这意味着它们不能在JVM上运行,而是在Android环境中运行。如果你想在单元测试中使用JSON API,你需要在Android Studio的build.gradle文件中添加以下依赖项:

testImplementation 'org.json:json:20140107'

这样,你就能够在单元测试中使用JSON API,并且不会再出现生成JSONObject时返回null的问题了。

0