2013-09-26 32 views
0

我正在構建我的第一個Android應用程序,它需要從本地Web服務器拉取JSON格式的數據。 Web服務器已啓動並運行,我可以在調試Android應用程序時看到返回的數據。但是,在嘗試將數據解析爲JSON數組時,我在最後一行代碼處繼續觸發NullPointerException。Android JSONArray NullPointerException無法評估JSONArray.toString()

召喚:


     JSONParserTask jParser = new JSONParserTask(); 
     ArrayList> ResultsList = new ArrayList>(); 
     EditText etSoNo = (EditText) findViewById(R.id.txtSoNo); 
     //String url = "http://xxx.xxx.xxx.xxx/api/SOLocLookup/" + etSoNo.getText(); 
     String url = "http://headers.jsontest.com/"; 

     try{ 
      DefaultHttpClient httpclient = new DefaultHttpClient(new BasicHttpParams()); 
      HttpGet httpget = new HttpGet(url); 
      httpget.setHeader("Content-type", "application/json"); 
      httpget.setHeader("Accept", "JSON"); 

      InputStream inputStream = null; 
      String result = null; 

      HttpResponse response = httpclient.execute(httpget); 
      HttpEntity entity = response.getEntity(); 

      inputStream = entity.getContent(); 
      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(); 

      StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); 
      StrictMode.setThreadPolicy(policy); 

      JSONArray jArray = new JSONArray(result); 

起初我想,也許我的API並沒有派出一個JSON格式的響應,所以你可以看到,我改變了呼叫測試JSON服務:http://headers.jsontest.com/

返回數據:

{ 「接受語言」: 「EN-US,EN; q = 0.8」, 「主機」: 「headers.jsontest.com」, 「用戶代理」: 「Mozilla/5.0(Windows NT 6.1;Safari/537.36「,」Accept「: 」text/html,application/xhtml + xml,application/xml; q = 0.9,/ ; q = 0.8" }

我的logcat:

09-26 18:08:30.977 61-214/system_process I/ActivityManager: 開始:意向{ CMP = com.evs。 sodscamera/.activity.SoMatlLookup.SoMatlLookup} from pid 1034 09-26 18:08:31.997 61-99/system_process I/ActivityManager: 顯示的com.evs.sodscamera/.activity.SoMatlLookup.SoMatlLookup: + 913ms 09-26 18:09:11.748 1034-1034/com.evs.sodscamera D/dalvikvm:返回exceptObj = 0x40589210的JDWP調用 (Ljava/lang/NullPointerException;)

我真的很茫然。我確信它是如此簡單,但是由於我缺乏經驗,我無法找到它。

謝謝!

-Greg

更新1:

改變JSONArray到一個JSONObject工程從測試網站返回的數據。但是當我去檢索我的原始數據時,它實際上被存儲爲一個數組。我應該已經意識到這一點,並沒有使用錯誤的測試數據發佈。我很抱歉。

新返回數據:

[{ 「索諾」:119152.0, 「SOLN」:1.00, 「項ID」: 「7075SHA6016」, 「ItemDesc」:「7075-T6 ALCLAD SHEET 0.016 \ 「」, 「尺寸1」:48.00000, 「size2個」:144.00000, 「TAGNO」:62336.0, 「PCS」:1.0, 「LOC」: 「G0303」},{ 「索諾」:119152.0, 「SOLN」:1.00, 「ItemID」:「7075SHA6016」,「ItemDesc」:「7075-T6 ALCLAD SHEET .016」,「Size1」:48.00000,「Size2」:144.00000,「TagNo」:67931.0,「Pcs」:124.0, 「Loc」:「G0303」},{「SoNo」:119152.0,「SoLn」:1.00,「ItemID」:「7075SHA6016」,「ItemDesc」:「7075-T6 ALCLAD SHEET .016 \」「,」Size1 「:48.00000,」 size2個 「:48.00000,」 TAGNO 「:68912.0,」 PCS「: 1.0, 「LOC」: 「REM75」},{ 「索諾」:119152.0, 「SOLN」:1。00,「ItemID」:「7075SHA6016」,「ItemDesc」:「7075-T6 ALCLAD SHEET .016 \」「,」Size1「:48.00000,」Size2「:144.00000,」TagNo「:69589.0,」Pcs「 177.0「Loc」:「RECVG」},{「SoNo」:119152.0,「SoLn」:1.00,「ItemID」:「7075SHA6016」,「ItemDesc」:「7075-T6 ALCLAD SHEET .016」 「尺寸1」:48.00000, 「size2個」:48.00000, 「TAGNO」:76493.0, 「PCS」:1.0, 「LOC」: 「REM75」},{ 「索諾」:119152.0, 「SOLN」:2.00 「的ItemID」: 「2024SHA3125M」,「ItemDesc」:「2024-T3 ALCLAD SHEET.1125」 MRS「,」Size1「:48.00000,」Size2「:144.00000,」TagNo「:72070.0,」Pcs「:12.0,」Loc「 :「H0108」},{「SoNo」:119152.0,「SoLn」:3.00,「ItemID」:「177SH-016」,「ItemDesc」:「T17/7 SHEET .016」
AMS- 「尺寸1」:36.00000, 「size2個」:120.00000, 「TAGNO」:70031.0, 「PCS」:1.0, 「LOC」: 「S0504」},{ 「索諾」:119152.0, 「SOLN」:3.00 「的ItemID」: 「177SH-016」, 「ItemDesc」 : 「T17/7 SHEET 0.016 \」」, 「尺寸1」:36.00000, 「size2個」:120.00000, 「TAGNO」:76108.0, 「PCS」:10.0, 「LOC」: 「」}]

謝謝!

+0

您好格雷格,打印「結果」變量,看看它包含什麼? –

+1

更改此JSONArray jArray = new JSONArray(result);到JSONObject joj = new JSONObject(result);因爲它不是jsonArray –

+0

所以你發佈應該工作,因爲你現在得到jsonarray – Raghunandan

回答

2

更改此

JSONArray jArray = new JSONArray(result); 

JSONObject jobject = new JSONObject(result); 

你得到什麼是一個JSONObject

{ // represents json object node 
    "Accept-Language": "en-US,en;q=0.8", 
    "Host": "headers.jsontest.com", 
    "Referer": "http://stackoverflow.com/questions/19036091/android-jsonarray-nullpointerexception-cannot-evaluate-jsonarray-tostring", 
    "User-Agent": "Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/28.0.1500.71 Chrome/28.0.1500.71 Safari/537.36", 
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" 
}  

如果您從服務器獲取json,還可以使用線程或Asynctask。所有與網絡有關的操作應該在一個線程上完成

0

你試圖解析的不是一個數組,它只是JSONObject

JSON中的數組用[]表示。例如。這將是一個數組:

[{"key": "value", "key2": "value2"}] 

這是包含在其中的單個對象:

{"key": "value", "key2": "value2"}