我使用杰克逊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代码我用?如果有的话,有人能告诉我应该怎么做?另外为什么我会得到一个黑屏,我不明白为什么它会显示。
在此先感谢
您知道android现在在其API中具有官方JSON支持。 。 。 – Mob 2012-02-02 10:31:33
我知道,但杰克逊JSON意味着更快,这就是为什么我选择它 – AdamM 2012-02-02 10:32:12
@AdamM couhld你请具体在错误的位置? – JoxTraex 2012-02-02 10:32:38