nextInt() 时 JSONParser 上的 Java Android 问题

标签 java android

我有一个看起来很简单的问题,但我不知道它来自哪里...... 我有以下 JSon:

{
  "meters": 1000,
  "ivs": 95
}

我有代码:

    JsonReader jsonreader = new JsonReader(new InputStreamReader(is));
    jsonreader.beginObject();
    while(jsonreader.hasNext()){
        String name = jsonreader.nextName();
        switch(name){
            case "meters": {jsonreader.nextInt(); // CRASH HERE}
            case "ivs": {jsonreader.nextInt(); // CRASH HERE}
            default: {jsonreader.skipValue();}
        }
    }
    jsonreader.endObject();
    jsonreader.close();

当我将案例线静音时,就可以了。以下代码有效:

    JsonReader jsonreader = new JsonReader(new InputStreamReader(is));
    jsonreader.beginObject();
    while(jsonreader.hasNext()){
        String name = jsonreader.nextName();
        switch(name){
            //case "meters": {jsonreader.nextInt(); // CRASH HERE}
            //case "ivs": {jsonreader.nextInt(); // CRASH HERE}
            default: {jsonreader.skipValue();}
        }
    }
    jsonreader.endObject();
    jsonreader.close();

但我不知道为什么当我取消注释其中一个值时,代码不起作用。

编辑:我尝试调试,名称值是“meters”或“ivs”,并且我尝试在两种情况下的“nextInt()”之前插入“jsonreader.hasNext()”,并且回答为真,然后像平常一样在“nextInt()”处崩溃。

最佳答案

问题出在您的 switch 语句中:

switch(name){
    case "meters": {jsonreader.nextInt();}
    case "ivs": {jsonreader.nextInt();}
    default: {jsonreader.skipValue();}
}

Switch 语句与 if-then block 略有不同,因为执行通过 case 语句。当 case 匹配时,执行会跳转到该点,然后照常继续,而不管其他 case 标签如何。当您遇到第一个情况(“米”)时,您会从 JSON 中读取 int。但随后执行继续,您读取另一个 int (来自“ivs”情况),然后您忽略一个值(在默认情况下),但此时没有可忽略的值,因此你的代码崩溃了。为了防止执行失败,您需要在每个 case 的末尾包含 break 语句。

您的代码应如下所示:

switch(name) {
    case "meters":
        jsonreader.nextInt();
        break;
    case "ivs":
        jsonreader.nextInt();
        break;
    default:
        jsonreader.skipValue();
        break; // This one's technically optional because there's nothing to
               // fall through to, but including it makes your code cleaner
               // and more consistent
}

关于nextInt() 时 JSONParser 上的 Java Android 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45592434/

相关文章:

java - 在 Docker 容器中运行的 JVM 的驻留集大小 (RSS) 和 Java 总提交内存 (NMT) 之间的差异

java - 屏幕方向卡在模拟器上

java - Maven - 如何为 hibernate 添加所有必需的依赖项?

java - MobileFirst 8.0 安全认证的 APPLICATION_DOES_NOT_EXIST?

android - 如何在 IntentService 中使用 WebView?

Java、Dropbox Api V2 - 尝试发出长轮询请求时出错

java - 从 int 到 char 可能有损;从文本文件读入时发生

Android (API 10) fragment 错误

android - 使用Android PhoneGap : Not able to create table in the database

java - Android:使用 CSS 问题在 WebView 中自定义字体