2012-08-12 50 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对象。

相关问题