首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JsonReader投掷IllegalStateException

JsonReader投掷IllegalStateException
EN

Stack Overflow用户
提问于 2015-11-23 13:26:10
回答 1查看 522关注 0票数 1

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

代码语言:javascript
复制
{"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结果:

代码语言:javascript
复制
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();
        }
    }

现在我得到了这个错误:

代码语言:javascript
复制
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)

据我所知,这段代码很好,但并不总是起作用。什么地方出问题了?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-23 13:45:48

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

  1. 您的代码似乎没有检查reader是否包含空字符串。(当IP返回糟糕的答案或什么都不返回时,可能会发生这种情况)。
  2. 加分:你不应该自己处理这个低级的问题。实际上,许多非常简单和非常可靠的库将为您完成JSON解析。它将处理这类问题,并给出明确的例外。你可以尝试Gson或其他更适合你需要的东西。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33872247

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档