gpt4 book ai didi

android - JsonReader 抛出 IllegalStateException

转载 作者:行者123 更新时间:2023-11-30 01:44:51 31 4
gpt4 key购买 nike

我发现使用 http://ip-api.com/json 是获取必要的用户位置详细信息的简单方法。例如,来自网站的结果是:

{"as":"AS37061 ONECOM","city":"Nairobi","country":"Kenya","countryCode":"KE","isp":"One Communications Ltd","lat":-1.2833,"lon":36.8167,"org":"ONECOM","query":"41.203.219.198","region":"110","regionName":"Nairobi Province","status":"success","timezone":"Africa/Nairobi","zip":""}

我一直在用下面的代码解析上面的 Json 结果:

String countryCode = null;
String name = null;

if (reader != null) {
try {
reader.setLenient(true);

reader.beginObject();

while (reader.hasNext()) {
switch (reader.nextName()) {
case "countryCode":
countryCode = reader.nextString().toLowerCase();
break;
case "country":
name = reader.nextString();
break;
default:
reader.skipValue();
break;
}
}

reader.endObject();
} catch (IOException e) {
e.printStackTrace();
}
}

现在我收到这个错误:

Fatal Exception: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was END_DOCUMENT at line 1 column 2016
at com.google.gson.stream.JsonReader.beginObject(JsonReader.java:374)
at com.radioafrica.music.fragment.TopTracks.getCountryCode(TopTracks.java:397)
at com.radioafrica.music.fragment.TopTracks.access$1100(TopTracks.java:57)
at com.radioafrica.music.fragment.TopTracks$9.run(TopTracks.java:377)
at java.lang.Thread.run(Thread.java:818)

据我所知,代码很好,但它并不总是有效。似乎是什么问题?

最佳答案

我认为有两个问题:您忘记了代码中的某些内容,以及您解析 JSON 的方式:

  1. 您的代码似乎没有检查 reader 是否包含空字符串。 (当 IP-API 返回错误答案或什么都没有时,可能会发生这种情况)。
  2. 奖励点:你不应该自己处理这个低级问题。实际上,许多非常轻便且极其可靠的库将为您进行 JSON 解析。它会处理这类问题并给你明确的异常。您可以尝试 Gson 或其他更适合您需求的东西。

关于android - JsonReader 抛出 IllegalStateException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33872247/

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