尝试将 List<String> 添加到 HashMap 时出现空点异常

Null point exception when trying to add a List<String> to HashMap

我正在尝试将字符串列表添加到 HashMap,下面显示了我尝试执行的方式。但是我得到了空点异常(我在代码中评论了我得到异常的地方)。 谁能看出我犯了什么错误。

     private List<Product> mCartList;
     List<String> listDataHeader;
     HashMap<String, List<String>> listDataChild;

        List<String> listdescription = new ArrayList<String>();
        List<String> listcrust = new ArrayList<String>();
        List<String> listsize = new ArrayList<String>();
        String descriptionString;
        String crustString;
        String sizeString;

        for (int i = 0; i < mCartList.size(); i++) {

            mCartList.get(i).selected = false;
            hot_number = mCartList.size();


            if (mCartList.get(i).description != null
                    && !mCartList.get(i).description.isEmpty()) {
                descriptionString = mCartList.get(i).description;

                listdescription.add(descriptionString);
                System.out.println("listdescription = " + listdescription);
            }

            if (mCartList.get(i).crust != null
                    && !mCartList.get(i).crust.isEmpty()) {
                crustString = mCartList.get(i).crust;

                listcrust.add(crustString);
                System.out.println("listcrust = " + listcrust);
            }

            if (mCartList.get(i).size != null
                    && !mCartList.get(i).size.isEmpty()) {
                sizeString = mCartList.get(i).size;

                listsize.add(sizeString);
                System.out.println("listsize = " + listsize);
            }

        }

        listDataChild.put("listcrust", listcrust); // error occurs here
        listDataChild.put("listsize", listsize);

        listDataHeader.addAll(listdescription);

        System.out.println("listDataChild = " + listDataChild);
        System.out.println("listDataHeader = " + listDataHeader);

我已经调试并在第 88 行获得了 listsize 的值,但是当我通过第 93 行时,它给出了下面提到的异常。

异常屏幕截图

您还没有为 listDataChild 成员分配对象。

它看起来是在 class 级别上定义的:

 private List<Product> mCartList;
 List<String> listDataHeader;
 HashMap<String, List<String>> listDataChild;

并且代码的重置在一个方法中。这样对吗?

默认情况下,成员未初始化并设置为空。如果您尝试对空引用执行操作,它将失败并出现 NullPointerException。

尝试以下操作:

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

您的 HashMap (listDataChild) 未在第 3 行初始化。

在给它赋值之前对其进行初始化。如果不初始化,调用put方法和NULL上的所有操作时,都会是NULL 会给你一个 NullPointerException.

例如,您可以在调用 put 方法之前添加初始化:

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

我没看到,您实例化了 listDataChild 对象,这将导致此问题,在您要添加新项目时对象为 null。

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