我想解析Json到字符串,以在listView上顯示它。我搜索和閱讀大量的文章和問題,但我不能找到解決辦法解析Json到字符串
我已經試過這JSON解析器來源:Android JSON Parsing Tutorial
public class JSONParser {
static InputStream is = null;
static JSONObject jObj = null;
static String json = "";
// constructor
public JSONParser() {
}
public JSONObject getJSONFromUrl(String url) {
// Making HTTP request
try {
// defaultHttpClient
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(url);
HttpResponse httpResponse = httpClient.execute(httpPost);
HttpEntity httpEntity = httpResponse.getEntity();
is = httpEntity.getContent();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(
is, "iso-8859-1"), 8);
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
is.close();
json = sb.toString();
} catch (Exception e) {
Log.e("Buffer Error", "Error converting result " + e.toString());
}
// try parse the string to a JSON object
try {
jObj = new JSONObject(json);
} catch (JSONException e) {
Log.e("JSON Parser", "Error parsing data " + e.toString());
}
// return JSON String
return jObj;
}
}
而另一個來自How to parse JSON in Android:
DefaultHttpClient httpclient = new DefaultHttpClient(new BasicHttpParams());
HttpPost httppost = new HttpPost("http://someJSONUrl.com/jsonWebService");
// Depends on your web service
httppost.setHeader("Content-type", "application/json");
InputStream inputStream = null;
String result = null;
try {
HttpResponse response = httpclient.execute(httppost);
HttpEntity entity = response.getEntity();
inputStream = entity.getContent();
// json is UTF-8 by default
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"), 8);
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null)
{
sb.append(line + "\n");
}
result = sb.toString();
} catch (Exception e) {
// Oops
}
finally {
try{if(inputStream != null)inputStream.close();}catch(Exception squish){}
}
但在他們兩人當我使用字符串JSON時,一切都很好,但是當我想從Web API讀取Json時(例如:http://api.androidhive.info/contacts/),這個錯誤在我看來:
09-27 23:47:11.015: E/AndroidRuntime(28635): FATAL EXCEPTION: main
09-27 23:47:11.015: E/AndroidRuntime(28635): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.mas.forcheksulotion/com.mas.forcheksulotion.MainActivity}: java.lang.NullPointerException
09-27 23:47:11.015: E/AndroidRuntime(28635): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1666)
09-27 23:47:11.015: E/AndroidRuntime(28635): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1682)
09-27 23:47:11.015: E/AndroidRuntime(28635): at android.app.ActivityThread.access$1500(ActivityThread.java:117)
09-27 23:47:11.015: E/AndroidRuntime(28635): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:943)
09-27 23:47:11.015: E/AndroidRuntime(28635): at android.os.Handler.dispatchMessage(Handler.java:99)
09-27 23:47:11.015: E/AndroidRuntime(28635): at android.os.Looper.loop(Looper.java:130)
09-27 23:47:11.015: E/AndroidRuntime(28635): at android.app.ActivityThread.main(ActivityThread.java:3744)
09-27 23:47:11.015: E/AndroidRuntime(28635): at java.lang.reflect.Method.invokeNative(Native Method)
09-27 23:47:11.015: E/AndroidRuntime(28635): at java.lang.reflect.Method.invoke(Method.java:507)
09-27 23:47:11.015: E/AndroidRuntime(28635): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
09-27 23:47:11.015: E/AndroidRuntime(28635): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
09-27 23:47:11.015: E/AndroidRuntime(28635): at dalvik.system.NativeStart.main(Native Method)
09-27 23:47:11.015: E/AndroidRuntime(28635): Caused by: java.lang.NullPointerException
09-27 23:47:11.015: E/AndroidRuntime(28635): at java.io.StringReader.<init>(StringReader.java:46)
09-27 23:47:11.015: E/AndroidRuntime(28635): at org.json.simple.JSONValue.parse(JSONValue.java:33)
09-27 23:47:11.015: E/AndroidRuntime(28635): at com.mas.forcheksulotion.MainActivity.onCreate(MainActivity.java:57)
09-27 23:47:11.015: E/AndroidRuntime(28635): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
09-27 23:47:11.015: E/AndroidRuntime(28635): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1630)
09-27 23:47:11.015: E/AndroidRuntime(28635): ... 11 more
而我仍然不知道在android上使用Json我應該使用JSONArray或JSONObject或將Json解析爲String?!
'com.mas.forcheksulotion.MainActivity.onCreate(MainActivity.java:57)' - 什麼是代碼在這裏...'MainActivity.java'在第57行。該值爲空 –
第二個請求 - 請向我們提供您的代碼,以便我們可以幫助您獲得該空值。 此外,我個人的建議,不要複製和粘貼任何解決方案將在這裏報告解析一個JSON,如果你不讀一點關於JSON。在這裏你可以找到一個很好的總結/教程:http://www.elated.com/articles/json-basics/ 請記住,JSON基礎知識與Android無關,但無論使用何種技術來管理它都是必要的。 。 – fasteque
請發佈你從服務器獲得的數據,也就是'結果'。你有2個模塊:從URL獲取並解析。所以請確認第一,你有適當的Json(我認爲 - 不)。之後,觀察員你String –