在Android上解析JSON時,出現空指針異常。在Android中解析JSON時出現空指針異常
這就是我想要解析JSON:
[{"value":"91.84","timestamp":"2012-10-11 14:12:13"}]
這裏是我解析的方式:
InputStream inputStream = null;
String result = null;
HttpResponse response;
BufferedReader reader;
JSONObject jObject;
String aJsonString1;
String aJsonString2;
public class ReadJSON extends AsyncTask<String, Void, String> {
protected String doInBackground(String... url) {
DefaultHttpClient httpclient = new DefaultHttpClient(new BasicHttpParams());
HttpPost httppost = new HttpPost("url is written here");
// Depends on your web service
httppost.setHeader("Content-type", "application/json");
try {
response = httpclient.execute(httppost);
HttpEntity entity = response.getEntity();
inputStream = entity.getContent();
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");
}
JSONArray jsonArray = new JSONArray(result);
for (int i=0; i < jsonArray.length(); i++)
{
JSONObject oneObject = jsonArray.getJSONObject(i);
// Pulling items from the array
String oneObjectsItem = oneObject.getString("value");
String oneObjectsItem2 = oneObject.getString("timestamp");
}
aJsonString1 = jsonArray.getJSONObject(0).getString("value");
aJsonString2 = jsonArray.getJSONObject(0).getString("timestamp");
return aJsonString1;
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
Log.e("JSON",e.getMessage() + " " + e);
}
return null; // Error case
}
protected void onPostExecute(String result) {
textView.setText(aJsonString1);
if(aJsonString1==null){
textView.setText("nothing to show");
}
}
這是堆棧跟蹤我得到:
04-26 15:37:40.930: E/AndroidRuntime(1387): FATAL EXCEPTION: AsyncTask #1
04-26 15:37:40.930: E/AndroidRuntime(1387): java.lang.RuntimeException: An error occured while executing doInBackground()
04-26 15:37:40.930: E/AndroidRuntime(1387): at android.os.AsyncTask$3.done(AsyncTask.java:299)
04-26 15:37:40.930: E/AndroidRuntime(1387): at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352)
04-26 15:37:40.930: E/AndroidRuntime(1387): at java.util.concurrent.FutureTask.setException(FutureTask.java:219)
04-26 15:37:40.930: E/AndroidRuntime(1387): at java.util.concurrent.FutureTask.run(FutureTask.java:239)
04-26 15:37:40.930: E/AndroidRuntime(1387): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
04-26 15:37:40.930: E/AndroidRuntime(1387): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
04-26 15:37:40.930: E/AndroidRuntime(1387): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
04-26 15:37:40.930: E/AndroidRuntime(1387): at java.lang.Thread.run(Thread.java:856)
04-26 15:37:40.930: E/AndroidRuntime(1387): Caused by: java.lang.NullPointerException
04-26 15:37:40.930: E/AndroidRuntime(1387): at org.json.JSONTokener.nextCleanInternal(JSONTokener.java:116)
04-26 15:37:40.930: E/AndroidRuntime(1387): at org.json.JSONTokener.nextValue(JSONTokener.java:94)
04-26 15:37:40.930: E/AndroidRuntime(1387): at org.json.JSONArray.<init>(JSONArray.java:87)
04-26 15:37:40.930: E/AndroidRuntime(1387): at org.json.JSONArray.<init>(JSONArray.java:103)
04-26 15:37:40.930: E/AndroidRuntime(1387): at com.example.ayasms.MainActivity$ReadJSON.doInBackground(MainActivity.java:176)
04-26 15:37:40.930: E/AndroidRuntime(1387): at com.example.ayasms.MainActivity$ReadJSON.doInBackground(MainActivity.java:1)
04-26 15:37:40.930: E/AndroidRuntime(1387): at android.os.AsyncTask$2.call(AsyncTask.java:287)
04-26 15:37:40.930: E/AndroidRuntime(1387): at java.util.concurrent.FutureTask.run(FutureTask.java:234)
04-26 15:37:40.930: E/AndroidRuntime(1387): ... 4 more
你能看到什麼可能是這裏的問題?
在此先感謝。
我想到的第一個想法是我希望你編寫代碼來檢查可能失敗的操作是否成功,並在失敗時輸出相應的日誌消息。 ;) – 2013-04-26 12:51:01
不要通過在這裏發佈來調試nullpointers:p如果你學習如何,你總是可以自己弄明白。首先要檢查的是行號。 – keyser 2013-04-26 12:51:34
OMG你爲什麼剛剛複製粘貼以前的答案?它不在代碼中產生'sb.toString()' – Stan 2013-04-26 12:55:11