Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/197.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在java中使用JSON has和isNull方法?_Java_Android_Json - Fatal编程技术网

如何在java中使用JSON has和isNull方法?

如何在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

我是android开发的初学者。我一直得到由以下原因引起的
: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数组不同。