Java 尝试在可展开列表上的空对象引用上调用虚拟方法

Java 尝试在可展开列表上的空对象引用上调用虚拟方法,java,android-studio,android-fragments,expandablelistview,Java,Android Studio,Android Fragments,Expandablelistview,这是我第一次在StackOverflow中提出问题,我想向您展示我的代码,如下所示: 第二片段类 @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_second, container, false); listView

这是我第一次在StackOverflow中提出问题,我想向您展示我的代码,如下所示:

第二片段类

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_second, container, false);
    listView = (ExpandableListView) view.findViewById(R.id.expand_list);

    final List<String> listGroup = new ArrayList<>();
    listGroup.add("Menu 1");
    listGroup.add("Menu 2");
    listGroup.add("Menu 3");

    List<Makanan> listItem1 = new ArrayList<>();
    List<Makanan> listItem2 = new ArrayList<>();
    List<Makanan> listItem3 = new ArrayList<>();
    listItem1.add(new Makanan("Menu 1", "Ikan", "Telur dan Susu", "Panjang", "Bandung"));
    listItem2.add(new Makanan("Menu 2", "Ikan", "Telur dan Susu", "Panjang", "Bandung"));
    listItem3.add(new Makanan("Menu 3", "Ikan", "Telur dan Susu", "Panjang", "Bandung"));

    final HashMap<String, List<Makanan>> lstItemsGroup = new HashMap<>();
    this.mainPresenter.addList(listGroup.get(0),listItem1);
    this.mainPresenter.addList(listGroup.get(1),listItem2);
    this.mainPresenter.addList(listGroup.get(2),listItem3);

    final ListMakanan listMakanan = new ListMakanan(getActivity(),listGroup,lstItemsGroup);
    listView.setAdapter(listMakanan);

    FloatingActionButton fab = view.findViewById(R.id.fab);
    fab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            listener.changePage(3);
        }
    });
    return view;
}
@覆盖
CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态){
视图=充气机。充气(R.layout.fragment_second,container,false);
listView=(ExpandableListView)view.findViewById(R.id.expand\u list);
最终列表列表组=新的ArrayList();
添加(“菜单1”);
添加(“菜单2”);
添加(“菜单3”);
List listItem1=新的ArrayList();
List listItem2=新的ArrayList();
List listItem3=新的ArrayList();
列表项1.添加(新Makanan(“菜单1”、“Ikan”、“Telur dan Susu”、“Panjang”、“万隆”);
列表项2.添加(新Makanan(“菜单2”、“Ikan”、“Telur dan Susu”、“Panjang”、“万隆”);
列表项3.添加(新Makanan(“菜单3”、“Ikan”、“Telur dan Susu”、“Panjang”、“万隆”);
final HashMap lstItemsGroup=新HashMap();
this.mainPresenter.addList(listGroup.get(0),listItem1);
this.mainPresenter.addList(listGroup.get(1),listItem2);
this.mainPresenter.addList(listGroup.get(2),listItem3);
final ListMakanan ListMakanan=new ListMakanan(getActivity(),listGroup,lstItemsGroup);
setAdapter(listMakanan);
FloatingActionButton fab=view.findViewById(R.id.fab);
fab.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
更改页面(3);
}
});
返回视图;
}
主演示者类

public class MainPresenter {
protected final HashMap<String , List<Makanan>> makananList;
protected IMainActivity ui;

public MainPresenter(IMainActivity active){
    this.ui = active;
    this.makananList = new HashMap<String, List<Makanan>>();
}
public void addList(String title,  List<Makanan> listMakanan){
    makananList.put(title, listMakanan);
    this.ui.updateList(this.makananList);
    this.ui.resetAddForm();
}
公共类主演示器{
受保护的最终HashMap makananList;
受保护的不活动用户界面;
公共主演示程序(iMAINACTIVE active active){
this.ui=活动;
this.makananList=new HashMap();
}
public void addList(字符串标题,List listMakanan){
makananList.put(标题,listMakanan);
this.ui.updateList(this.makananList);
this.ui.resetAddForm();
}
}

问题是,为什么我不能在MainPresenter类中添加/放置带有addList()方法的hashMap

你们能解决这个问题吗

多谢各位


(错误显示在标题中)

您不应该这样做。makananList引起的空点异常是在addList方法中初始化的。除非在提供MainPresenter实例之前调用该方法。 如下图所示:
MainPresenter mp=新的MainPresenter(活动)mp.addList(参数)