【问题标题】:Android Jackson JSON Parser null valueAndroid Jackson JSON Parser 空值
【发布时间】:2012-02-25 00:19:47
【问题描述】:

我正在使用 Jackson JSON 解析器,因为我听说它比默认的 Android 解析器高效得多。我在这里学习了如何在本教程中使用它

http://www.mkyong.com/java/jackson-streaming-api-to-read-and-write-json/

如果有人想学习如何使用 Jackson json 解析器,这是一个很棒的教程。

但是,我遇到了一个问题,我可以在 Java 中从 URL 解析数据,但是当我将 Jackson 与 Android 一起使用时,我得到空值或屏幕出于某种原因只是显示为黑色。

为了从网站检索数据,我从这里使用此代码

http://www.javacodegeeks.com/2011/01/android-json-parsing-gson-tutorial.html

  private InputStream retrieveStream(String url) {

    DefaultHttpClient client = new DefaultHttpClient(); 

    HttpGet getRequest = new HttpGet(url);

    try {

       HttpResponse getResponse = client.execute(getRequest);
       final int statusCode = getResponse.getStatusLine().getStatusCode();

       if (statusCode != HttpStatus.SC_OK) { 
          Log.w(getClass().getSimpleName(), 
              "Error " + statusCode + " for URL " + url); 
          return null;
       }

       HttpEntity getResponseEntity = getResponse.getEntity();
       return getResponseEntity.getContent();

    } 
    catch (IOException e) {
       getRequest.abort();
       Log.w(getClass().getSimpleName(), "Error for URL " + url, e);
    }

    return null;

 }

然后在我的解析数据方法中

        InputStream source = retrieveStream(url);

    try {

        JsonFactory jfactory = new JsonFactory();


        JsonParser jParser = jfactory.createJsonParser(source);

然后我按照上面链接的教程中所示解析数据

    while (jParser.nextToken() != JsonToken.END_OBJECT) {

            String fieldname = jParser.getCurrentName();
            if ("Name".equals(fieldname)) {
                jParser.nextToken();
                this.setName(jParser.getText());
            }
            if ("Number".equals(fieldname)) {
                jParser.nextToken();
                this.setNumber(jParser.getText());
            }
        }

我使用的 url 是一个虚拟站点设置,上面只有一个 JSON 文件,我用它来练习 Jackson JSON 解析。

现在我知道我的解析数据代码很好,因为我在普通的 Java 类中,我可以使用我创建的代码解析来自网站的数据,并且工作正常。

但是,如果我尝试将 Android 中的代码与我刚刚显示的代码一起使用,我会因为某些奇怪的原因而出现黑屏。我在清单中启用了互联网权限

我使用的http代码有问题吗?如果是这样,有人可以告诉我应该怎么做吗?还有为什么我会黑屏,我不明白为什么会这样。

提前致谢

【问题讨论】:

  • 你知道android现在在它的API中有官方的JSON支持。 . .
  • 我知道,但是 Jackson JSON 意味着要快得多,这就是我选择它的原因
  • @AdamM 能否请您具体说明错误的位置?
  • 您发布的第一个链接使用 Jackson,而第二个使用 GSON。两种不同的东西。
  • 你看原来我只是使用 URL 并在 Jfactory 中输入 URL,但返回的数据只是 null。然后我意识到,使用 Android 时,您需要使用 HTTP 客户端才能从 Internet 访问数据。现在使用 http 客户端方法,我没有收到错误,而是出于某种奇怪的原因黑屏。

标签: android json


【解决方案1】:

不确定这是否是问题所在,但您的循环结构是不安全的:根据您获得的数据类型,您很可能不会获得END_OBJECT 作为下一个标记。并且在内容结束时,nextToken() 将返回 null 以指示输入结束。那么,也许你会在某些输入下进入无限循环?

【讨论】:

    【解决方案2】:

    我发现了问题,链接是无法从模拟器访问的本地主机。设置已更改,现在可以访问链接,现在完美运行:D

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-02
      • 2016-08-29
      • 2017-06-28
      • 1970-01-01
      • 2023-03-09
      • 1970-01-01
      相关资源
      最近更新 更多