【发布时间】: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 客户端方法,我没有收到错误,而是出于某种奇怪的原因黑屏。