2012-02-02 85 views
0

我使用杰克逊JSON解析器,因为我听说它比默认的Android解析器更有效率。我学会了如何使用它关闭这个教程这里Android杰克逊JSON解析器空值

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

这是伟大的教程,如果有人想学习如何使用JSON杰克逊解析器。

不过,我在这有一个问题,我可以从URL解析Java中的数据正常,但是当我用杰克逊与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解析就可以了JSON文件。

现在我知道我的解析数据的代码是好的,因为我在正常的Java类,我可以用我创建的代码解析从网站的数据,并能正常工作。

但是,如果我尝试在Android中的代码使用的代码,我刚刚出,我只是得到了一些奇怪的原因黑屏。我在清单

上网功能权限,是不是有什么错误的HTTP代码我用?如果有的话,有人能告诉我应该怎么做?另外为什么我会得到一个黑屏,我不明白为什么它会显示。

在此先感谢

+1

您知道android现在在其API中具有官方JSON支持。 。 。 – Mob 2012-02-02 10:31:33

+1

我知道,但杰克逊JSON意味着更快,这就是为什么我选择它 – AdamM 2012-02-02 10:32:12

+0

@AdamM couhld你请具体在错误的位置? – JoxTraex 2012-02-02 10:32:38

回答

0

我发现这个问题,链接是其不能从仿真器访问本地主机。设置已更改,现在可以访问链接,现在完美工作:D

0

不知道这是否是问题,但你的循环结构是不安全的:这取决于类型的数据你,这是很可能的,你没有得到END_OBJECT作为下一个标记。在内容结束时,nextToken()将返回null以指示输入结束。那么也许你会因为某些输入而陷入无限循环?