android 使用截击的可扩展列表视图

android expandablelistview using volley

java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.util.HashMap.toString()' on a null object reference

我无法在我的片段中显示 android 可使用凌空展开 能够从服务器获得响应,但显示错误 Null Pointer Exception

我无法在我的片段中显示 android 可使用凌空展开 能够从服务器获得响应,但显示错误 Null Pointer Exception

谢谢

   public class NotificationFragment extends Fragment {
        private static String url = "http://www.androidbegin.com/tutorial/jsonparsetutorial.txt";
        private ProgressDialog mprocessingdialog;
        private TextView tv_welcomeuser, tv_recentupdate;
        private ExpandableListAdapter expandableListAdapter;
        private ExpandableListView exp_leaseoffer;
        private List<String> listDataHeader;
        private View rootView;
        private HashMap<String, List<String>> listDataChild;
        String jsonstr;
        RequestQueue requestQueue;





        public static NotificationFragment newInstance() {
            NotificationFrag

ment fragment = new NotificationFragment();
        return fragment;
    }
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_notification, container, false);



        tv_welcomeuser = (TextView) view.findViewById(R.id.tv_welcomeuser);
        tv_recentupdate = (TextView) view
                .findViewById(R.id.tv_recentupdate);

        exp_leaseoffer = (ExpandableListView) view.findViewById(R.id.lvExp);
        listDataHeader = new ArrayList<String>();

        new DownloadJason().execute();

        return view;
    }
    private class DownloadJason extends AsyncTask<Void, Void, Void> {

        @Override
        protected void onPreExecute() {
            // TODO Auto-generated method stub
            super.onPreExecute();
            mprocessingdialog = new ProgressDialog(getActivity());
            mprocessingdialog.setTitle("Please Wait..");
            mprocessingdialog.setMessage("Loading");
            mprocessingdialog.setIndeterminate(false);
            mprocessingdialog.show();


        }

        @Override
        protected Void doInBackground(Void... arg0) {
            // TODO Auto-generated method stub

            StringRequest stringRequest = new StringRequest(Request.Method.GET,url,
                    new Response.Listener<String>() {
                        @Override
                        public void onResponse(String response) {
                            Log.d("rlog", response.toString());


                            jsonstr = response;


            if (jsonstr != null) {

                listDataHeader = new ArrayList<String>();
                listDataChild = new HashMap<String, List<String>>();

                try {
                    JSONObject jobj = new JSONObject(jsonstr);
                    JSONArray jarray = jobj.getJSONArray("worldpopulation");
                    for (int hk = 0; hk < jarray.length(); hk++) {
                        JSONObject d = jarray.getJSONObject(hk);
                        // Adding Header data

                        listDataHeader.add(d.getString("country"));
                        // Adding child data for lease offer
                        List<String> lease_offer = new ArrayList<String>();

                        lease_offer.add(d.getString("country") + "'s Rank is : "
                                + d.getString("rank"));
                        lease_offer.add("And Population is "+d.getString("population"));
                        // Header into Child data
                        listDataChild.put(listDataHeader.get(hk), lease_offer);

                    }
                } catch (JSONException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

            }

                        }
                    }, new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    VolleyLog.d("rlog", "Error: " + error.getMessage());

                }
            });

            requestQueue = Volley.newRequestQueue(getActivity());
            requestQueue.add(stringRequest);


            return null;
        }

        @Override
        protected void onPostExecute(Void result) {
            // TODO Auto-generated method stub
            super.onPostExecute(result);
            mprocessingdialog.dismiss();

            expandableListAdapter = new ExpandableAdapter(
                    getActivity(), listDataHeader, listDataChild);
            Log.i("groups", listDataHeader.toString());
            Log.i("details", listDataChild.toString());
            exp_leaseoffer.setAdapter(expandableListAdapter);

            exp_leaseoffer.setOnGroupClickListener(new OnGroupClickListener() {

                @Override
                public boolean onGroupClick(ExpandableListView parent, View v,
                                            int groupPosition, long id) {
                    // TODO Auto-generated method stub
                    return false;
                }

            });
            // Listview Group expanded listener
            exp_leaseoffer
                    .setOnGroupExpandListener(new ExpandableListView.OnGroupExpandListener() {

                        @Override
                        public void onGroupExpand(int groupPosition) {

                        }
                    });
            exp_leaseoffer
                    .setOnGroupCollapseListener(new ExpandableListView.OnGroupCollapseListener() {

                        @Override
                        public void onGroupCollapse(int groupPosition) {
                            Toast.makeText(
                                    getActivity().getApplicationContext(),
                                    listDataHeader.get(groupPosition)
                                            + " Collapsed", Toast.LENGTH_SHORT)
                                    .show();
                        }
                    });
            exp_leaseoffer.setOnChildClickListener(new ExpandableListView.OnChildClickListener() {

                @Override
                public boolean onChildClick(ExpandableListView parent, View v,
                                            int groupPosition, int childPosition, long id) {


                    return false;
                }
            });

        }
    }


    }

在顶部初始化并声明 hashmap

 private HashMap<String, List<String>> listDataChild = new  HashMap<String, List<String>> ();