2012-08-12 95 views
-1

我正在開發一個應用程序,我正在使用java解碼JSON響應。以下是代碼片段在那裏我偶爾會得到一個NullPointerException異常NullPointerException即使對象不爲空

JSONParser parser=new JSONParser(); 
URL url=new URL("http://api.yummly.com/v1/api/recipes?q="+ 
URLEncoder.encode(dish,"UTF-  8")+"&_app_id=APP_ID8&_app_key=APP_KEY"); 
HttpURLConnection conn=(HttpURLConnection)url.openConnection(); 
BufferedReader br=new BufferedReader(new InputStreamReader(conn.getInputStream())); 
Object json=parser.parse(br); 
JSONObject obj=(JSONObject)json; 
if(obj!=null) 
count=(long)obj.get("totalMatchCount"); <--- Exception at this point 

這個標準是在一個循環中運行,並隨機重複給予NullPointerException異常。

+0

NPE可能發生在'get()'方法內部。 – 2012-08-12 12:27:04

+0

顯示'stacktrace',你可能會發現異常發生的地方 – mishadoff 2012-08-12 12:27:49

+0

它給了我這個例外。如果get中有一個異常,那麼它必須在堆棧跟蹤中。 – kaysush 2012-08-12 12:28:37

回答

3

它告訴你,obj.get(「totalMatchCount」)返回null,並在演員陣容中爆炸。

喜歡的東西

Object countObj; 
if(obj!=null) 
    countObj = obj.get("totalMatchCount"); 
if (countObj != null) 
count=(long)countObj 

現在爲什麼,是否如果爲空,則是另一回事。

+0

你有什麼想法可以做什麼? – kaysush 2012-08-12 12:54:42

+0

必須查看getTotalMatchcount的代碼。看起來像你的url返回的json對象沒有一個叫做那個的屬性。 – 2012-08-12 17:54:15

0

JSONObject#get返回如果對象不包含具有該名稱的關鍵字,則返回null。(javadoc)。所以最有可能的Json響應不包含密鑰totalMatchCount

檢查拼寫,檢查響應應該包含鍵(如果它確實有一個值),並檢查實際響應確實有關鍵(也許您會收到一些錯誤響應或其他什麼東西,是意外) 。

使用調試器,抓住NPE並仔細檢查json對象。

相關問題