如何在java中使用JSON has和isNull方法?
我是android开发的初学者。我一直得到由以下原因引起的如何在java中使用JSON has和isNull方法?,java,android,json,Java,Android,Json,我是android开发的初学者。我一直得到由以下原因引起的:java.lang.NullPointerException错误。我已经使用了optJSONObject(0)方法和if语句results\u object.has(“格式化的\u地址”)。有没有办法忽略错误异常 public String convertLatLngToAddress(JSONObject lat_lng) throws JSONException { Double lat = lat_lng.getDoubl
:java.lang.NullPointerException
错误。我已经使用了optJSONObject(0)
方法和if语句results\u object.has(“格式化的\u地址”)
。有没有办法忽略错误异常
public String convertLatLngToAddress(JSONObject lat_lng) throws JSONException {
Double lat = lat_lng.getDouble("lat");
Double lng = lat_lng.getDouble("lng");
String link = "http://maps.googleapis.com/maps/api/geocode/json?latlng=" + lat + "," + lng + "&sensor=false";
String address_in_string = urlToStringBuffer(link);
JSONObject address_object = new JSONObject(address_in_string);
JSONArray results = address_object.optJSONArray("results");
JSONObject results_object = results.optJSONObject(0);
if(results_object.has("formatted_address") && !results_object.isNull("formatted_address")) { //
String address = results_object.optString("formatted_address");
return address;
} else {
return "";
}
}
JSON
日志
从文件中
我想说你的
results.optJSONObject(0)
返回null。因为参数是一个字符串
,所以您可能需要执行以下操作
results.optJSONObject("results")
但是,这可能不会返回JSONObject
(请参阅文档),而是返回JSONArray
,这也会导致NullPointerException
。要获取数组,请使用optJSONArray(字符串键)
由于返回了null
,因此无法对结果执行has()
。来自文档
JSONObject results_object = results.optJSONObject(0);
我想说你的
results.optJSONObject(0)
返回null。因为参数是一个字符串
,所以您可能需要执行以下操作
results.optJSONObject("results")
但是,这可能不会返回JSONObject
(请参阅文档),而是返回JSONArray
,这也会导致NullPointerException
。要获取数组,请使用optJSONArray(字符串键)
由于返回了null
,因此无法对结果执行has()
JSONObject results_object = results.optJSONObject(0);
在检查数组大小之前,您从未从数组中获取项,如下所示:
JSONArray results = address_object.optJSONArray("results");
if(results.length()>0){
JSONObject results_object = results.optJSONObject(0);
}
当您想查看结果的所有项目时
JSONArray results = address_object.optJSONArray("results");
for(int i=0;i<results.length() ;i++){
JSONObject results_object = results.optJSONObject(i);
}
JSONArray results=address_object.optJSONArray(“结果”);
对于(int i=0;i
在检查数组大小之前,您从未从数组中获取项,如下所示:
JSONArray results = address_object.optJSONArray("results");
if(results.length()>0){
JSONObject results_object = results.optJSONObject(0);
}
当您想查看结果的所有项目时
JSONArray results = address_object.optJSONArray("results");
for(int i=0;i<results.length() ;i++){
JSONObject results_object = results.optJSONObject(i);
}
JSONArray results=address_object.optJSONArray(“结果”);
对于(int i=0;i这是你应该写的:
public String convertLatLngToAddress(JSONObject lat_lng) throws JSONException {
Double lat = lat_lng.getDouble("lat");
Double lng = lat_lng.getDouble("lng");
String link = "http://maps.googleapis.com/maps/api/geocode/json?latlng=" + lat + "," + lng + "&sensor=false";
String address_in_string = urlToStringBuffer(link);
JSONObject address_object = new JSONObject(address_in_string);
JSONArray results = address_object.optJSONArray("results");
JSONObject results_object = results.optJSONObject(0);
if(results_object != null) {
if(results_object.has("formatted_address") && !results_object.isNull("formatted_address")) { //
String address = results_object.optString("formatted_address");
return address;
}
}
}
在调用任何方法之前,必须首先检查对象是否不等于null
我希望这能解决你的问题:)这是你应该写的:
public String convertLatLngToAddress(JSONObject lat_lng) throws JSONException {
Double lat = lat_lng.getDouble("lat");
Double lng = lat_lng.getDouble("lng");
String link = "http://maps.googleapis.com/maps/api/geocode/json?latlng=" + lat + "," + lng + "&sensor=false";
String address_in_string = urlToStringBuffer(link);
JSONObject address_object = new JSONObject(address_in_string);
JSONArray results = address_object.optJSONArray("results");
JSONObject results_object = results.optJSONObject(0);
if(results_object != null) {
if(results_object.has("formatted_address") && !results_object.isNull("formatted_address")) { //
String address = results_object.optString("formatted_address");
return address;
}
}
}
在调用任何方法之前,必须首先检查对象是否不等于null
我希望这能解决您的问题:)使用以下代码:
JSONArray results = address_object.optJSONArray("results");
//then get the all objects insid this array
for(int i=0;i<results.length;i++){
JsonObjects jsonObjects=results.getJsonObjects(i);
// then access all child data using this jsonObject}
JSONArray results=address_object.optJSONArray(“结果”);
//然后获取该数组中的所有对象
对于(int i=0;i使用以下代码:
JSONArray results = address_object.optJSONArray("results");
//then get the all objects insid this array
for(int i=0;i<results.length;i++){
JsonObjects jsonObjects=results.getJsonObjects(i);
// then access all child data using this jsonObject}
JSONArray results=address_object.optJSONArray(“结果”);
//然后获取该数组中的所有对象
for(int i=0;iIt似乎JSONObject results\u object=results.optJSONObject(0);
正在返回null,因此您不能对null对象调用“has”。@Thomas R。非常感谢您,您是对的,我已经超过了此API的速率限制。因此json数组不同。似乎JSONObject results\u object=results.optJSONObject(0);
返回null,因此您不能对null对象调用“has”。@Thomas R。非常感谢您,您是对的,我已经超过了此API的速率限制。因此json数组不同。