【问题标题】:java.lang.NullPointerException: Attempt to invoke virtual method 'int org.json.JSONArray.length()' on a null object referencejava.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“int org.json.JSONArray.length()”
【发布时间】:2018-07-24 10:23:52
【问题描述】:

每次我打开我的应用程序时,它都会因为这个错误而崩溃>

DataParser.java:

public class DataParser {

    private HashMap<String,String> getPlace(JSONObject googlePlacesJson){
        HashMap<String,String> googlePlaceMap=new HashMap<>();

        String placeName="-NA-";
        String vicinity="-NA-";
        String latitude="";
        String logitude="";
        String reference="";
        List<HashMap<String,String>> placesList=new ArrayList<>();


        try {
        if(!googlePlacesJson.isNull("name")){

                placeName=googlePlacesJson.getString("name");

        }
        if (!googlePlacesJson.isNull("vicinity")){
            vicinity=googlePlacesJson.getString("vicinity");
        }
        latitude=googlePlacesJson.getJSONObject("geometry").getJSONObject("location").getString("lat");
        logitude=googlePlacesJson.getJSONObject("geometry").getJSONObject("location").getString("lng");
        reference=googlePlacesJson.getString("reference");

        googlePlaceMap.put("name",placeName);
        googlePlaceMap.put("vicinity",vicinity);
        googlePlaceMap.put("lat",latitude);
        googlePlaceMap.put("lng",logitude);
        googlePlaceMap.put("reference",reference);




        } catch (JSONException e) {
            e.printStackTrace();
        }

        return googlePlaceMap;
    }

    private List<HashMap<String,String>> getPlaces(JSONArray jsonArray){
        long count;
       count=jsonArray.length(); // error comes on this line
        List<HashMap<String,String>> placesList=new ArrayList<>();
        HashMap<String,String> placeMap=null;

        for(int i=0;i<count;i++){
            try {
                placeMap=getPlace((JSONObject) jsonArray.get(i));
                placesList.add(placeMap);

            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
        return placesList;
    }

    public List<HashMap<String,String>> parse(String jsonData){
        JSONArray jsonArray=null;
        JSONObject jsonObject;

        try {
            jsonObject=new JSONObject(jsonData);
            jsonArray=jsonObject.getJSONArray("results");


        } catch (JSONException e) {
            e.printStackTrace();
        }

        return getPlaces(jsonArray);

    }

}

这是我的日志猫的屏幕截图:

【问题讨论】:

    标签: json nullpointerexception long-integer


    【解决方案1】:

    问题出在此处:

    public List<HashMap<String,String>> parse(String jsonData){
        JSONArray jsonArray=null;
        JSONObject jsonObject;
    
        try {
            jsonObject=new JSONObject(jsonData);
            jsonArray=jsonObject.getJSONArray("results"); // !!! this line here !!!
    
    
        } catch (JSONException e) {
             e.printStackTrace();
        }
    
        return getPlaces(jsonArray);
    
    }
    

    getJSONArray("results"); 返回 null,这会导致以后出现问题 (NullPointerException)。

    你应该做什么:

    检查您的 JSON 是否有语法错误。 在 getJSONArray() 行放置一个断点并查看jsonDatajsonObject,如果一切正常,应该是这样。 您要检索的数组可能无效或根本不在 jsonData 中。

    【讨论】:

      【解决方案2】:

      我将首先验证jsonArray 是否为空,然后再运行整个方法。或:

      if (jsonArray != null) count=jsonArray.length(); else count = 0;

      然后进行调试以找出您使用空对象调用该方法的原因。

      【讨论】:

        猜你喜欢
        • 2020-09-17
        • 2015-04-20
        • 2015-08-17
        • 2019-01-21
        • 2014-04-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-02-23
        相关资源
        最近更新 更多