我使用傑克遜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