Android 错误致命异常:java.lang.NullPointerException

Android error Fatal Exception: java.lang.NullPointerException

我使用 Fabric Crashlytics 发布了一个应用程序,最近几天我收到此错误崩溃用户:

致命异常:java.lang.NullPointerException 尝试在空对象引用

上调用虚拟方法 'void ...android.controller.CustomListAdapter.notifyDataSetChanged()'

受影响的片段代码是这样的:

private void loadListView(String response,float lowerLimit,float upperLimit)
{
    //Log.e("test", "loadList:"+response);
    if(Globals.geoJsonResponse.size() == 0)
    {
        //Log.e("test", "aaa:"+Globals.geoJsonResponse.size());
        try {
            JSONObject featureCollection=new JSONObject(response);
            try{
                FirstProjectApplication.mSearchSubTitle =  featureCollection.getString("subTitle");
                getActivity().getActionBar().setSubtitle(FirstProjectApplication.mSearchSubTitle);
            }catch(Exception e){}
            globalResponseObject.clear();
            popupResponseObject.clear();
            JSONArray features=featureCollection.getJSONArray("features");
            for (int i = 0; i < features.length(); i++) {

                JSONObject properties=features.getJSONObject(i);
                String type = properties.getJSONObject("properties").getString("type");
                String author = properties.getJSONObject("properties").getString("author");
                float mag=Float.parseFloat(properties.getJSONObject("properties").getString("mag"));


                SimpleDateFormat  format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
                Date date1 = format.parse(properties.getJSONObject("properties").getString("time"));

                GeoJsonResponse obj=new GeoJsonResponse(
                        properties.getJSONObject("properties").getString("eventId"),
                        properties.getJSONObject("properties").getString("author"),
                        properties.getJSONObject("properties").getString("place"),
                        Double.parseDouble(properties.getJSONObject("properties").getString("mag")),
                        Double.parseDouble(properties.getJSONObject("geometry").getJSONArray("coordinates").getString(2)),
                        properties.getJSONObject("properties").getString("time"),date1,
                        Double.parseDouble(properties.getJSONObject("geometry").getJSONArray("coordinates").getString(1)),  //lat,lon is reversed
                        Double.parseDouble(properties.getJSONObject("geometry").getJSONArray("coordinates").getString(0))


                );

                if(author.equals("AUTOMATIC")) {
                    popupResponseObject.add(obj);
                } else {
                    if((mag>=lowerLimit&&mag<upperLimit)) {
                        globalResponseObject.add(obj);
                        //Log.e("test", "mag:"+mag);
                    }
                    Globals.geoJsonResponse.add(obj);
                }
            }
            //  Collections.sort(globalResponseObject, new DateSorter());
        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            //Log.e("test", e.getLocalizedMessage());
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            //Log.e("test", e.getLocalizedMessage());
        }

        sort();
        adpater=new  CustomListAdapter(getActivity(), globalResponseObject);
        geoJSON.setAdapter(adpater);
        //Log.e("test", "bbb:"+globalResponseObject.size());
    } else {
        //Log.e("test", "bbb:"+globalResponseObject.size());
        globalResponseObject.clear();
        for(GeoJsonResponse geo_response:Globals.geoJsonResponse)
        {
            if((geo_response.getMagnitude()>=lowerLimit&&geo_response.getMagnitude()<upperLimit)) globalResponseObject.add(geo_response);
        }
        sort();
        adpater.notifyDataSetChanged();
    }

    if(globalResponseObject.size() == 0) {
        new AlertDialog.Builder(getActivity(),R.style.AppCompatAlertDialogStyle)
                .setTitle(getString(R.string.allert))
                .setMessage(getString(R.string.allertsms ))
                .setPositiveButton("Ok",null)
                .show();


    }
}

行错误是adpater.notifyDataSetChanged(); 在我的设备上我没有任何崩溃。 有什么帮助吗? 谢谢

错误是由于这个 else 部分。它发生在这个 if(Globals.geoJsonResponse.size() == 0) 不满足时。

else {
    //Log.e("test", "bbb:"+globalResponseObject.size());
    globalResponseObject.clear();
    for(GeoJsonResponse geo_response:Globals.geoJsonResponse)
    {
        if((geo_response.getMagnitude()>=lowerLimit&&geo_response.getMagnitude()<upperLimit)) globalResponseObject.add(geo_response);
    }
    sort();
    adpater.notifyDataSetChanged();
}

您还必须在此块中或您的请求方法之外初始化适配器。

另请阅读this

我认为您没有初始化适配器。你只初始化它

    if ( Globals.geoJsonResponse.size() == 0 ) {
        ....
        adpater=new  CustomListAdapter(getActivity(), globalResponseObject);
        geoJSON.setAdapter(adpater);
    } else {
        ....
        adpater.notifyDataSetChanged();
    }