gpt4 book ai didi

nextInt() 时 JSONParser 上的 Java Android 问题

转载 作者:行者123 更新时间:2023-12-02 12:23:40 24 4
gpt4 key购买 nike

我有一个看起来很简单的问题,但我不知道它来自哪里......我有以下 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com