Android ExpandableListview获取IndexOutOfBoundsException如果组为';s children计数为零

Android ExpandableListview获取IndexOutOfBoundsException如果组为';s children计数为零,android,listview,expandablelistview,indexoutofboundsexception,Android,Listview,Expandablelistview,Indexoutofboundsexception,希望你们都做得很好。嗯,我在一个小问题上浪费了将近两天(48小时)。我使用的是expandablelistview我列表中的一些组有子项,其余为空,没有子项。该列表在有子项时运行良好,但如果该组没有子项,则应用程序将崩溃 此外,我在这里做的是吼叫 public void getCartData(){ cartProgress.setVisibility(View.VISIBLE); listDataHeader = new ArrayList<>(); Li

希望你们都做得很好。嗯,我在一个小问题上浪费了将近两天(48小时)。我使用的是
expandablelistview
我列表中的一些组有子项,其余为空,没有子项。该列表在有子项时运行良好,但如果该组没有子项,则应用程序将崩溃

此外,我在这里做的是吼叫

 public void getCartData(){
    cartProgress.setVisibility(View.VISIBLE);
    listDataHeader = new ArrayList<>();
    ListChild = new ArrayList<>();
    DatabaseReference query = mDatabase;
    query.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            //child is each element in the finished list
             td = (HashMap<String, Object>) dataSnapshot.getValue();
            if(td!=null) {

                values = td.values();
                String string = values.toString();

                JSONArray jsonArray = null;
                try {
                    jsonArray = new JSONArray(values);

                    for (int a = 0; a < jsonArray.length(); a++) {

                        JSONObject allJsonObject = jsonArray.getJSONObject(a);

                        CartFragParentModel cartFragParentModel = new CartFragParentModel();

                        cartFragParentModel.setItem_name(allJsonObject.optString("mName"));
                        cartFragParentModel.setItem_price(allJsonObject.optString("mPrice"));
                        mQuantity = allJsonObject.optString("mQuantity");
                        cartFragParentModel.setItem_quantity(allJsonObject.optString("mQuantity"));
                        cartFragParentModel.setItem_symbol(allJsonObject.optString("mCurrency"));

                        listDataHeader.add(cartFragParentModel);
                        listChildData = new ArrayList<>();

                        if (!allJsonObject.has("extraItem")) {
                            cartProgress.setVisibility(View.GONE);
                        }
                        else {
                            JSONArray extraItemArray = allJsonObject.getJSONArray("extraItem");

                            for (int b = 0; b < extraItemArray.length(); b++) {

                                JSONObject jsonObject = extraItemArray.getJSONObject(b);

                                CartFragChildModel cartFragChildModel = new CartFragChildModel();

                                cartFragChildModel.setQuantity(allJsonObject.optString("mQuantity"));
                                cartFragChildModel.setSymbol(allJsonObject.optString("mCurrency"));
                                cartFragChildModel.setName(jsonObject.optString("menu_extra_item_name"));
                                cartFragChildModel.setPrice(jsonObject.optString("menu_extra_item_price"));

                                listChildData.add(cartFragChildModel);
                            }
                            ListChild.add(listChildData);

                        }

                        cartFragExpandable = new CartFragExpandable(getContext(), listDataHeader, ListChild);
                        selected_item_list.setAdapter(cartFragExpandable);
                        cartProgress.setVisibility(View.GONE);
                        int itemCount = cartFragExpandable.getGroupCount();

                        for(int i=0; i < cartFragExpandable.getGroupCount(); i++)
                                    try {
                                        selected_item_list.expandGroup(i);
                                    }catch (IndexOutOfBoundsException e){
                                        e.getCause();
                                    }




                    }

                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
            else {
                cartProgress.setVisibility(View.GONE);
                no_cart_div.setVisibility(View.VISIBLE);
            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });

}
public void getCartData(){
cartProgress.setVisibility(View.VISIBLE);
listDataHeader=新的ArrayList();
ListChild=newarraylist();
DatabaseReference query=mDatabase;
query.addListenerForSingleValueEvent(新的ValueEventListener()){
@凌驾
公共void onDataChange(DataSnapshot DataSnapshot){
//子元素是完成列表中的每个元素
td=(HashMap)dataSnapshot.getValue();
如果(td!=null){
values=td.values();
String String=values.toString();
JSONArray JSONArray=null;
试一试{
jsonArray=新的jsonArray(值);
对于(int a=0;a
另外,我得到的异常是自定义适配器

ublic class CartFragExpandable  extends BaseExpandableListAdapter {

Context context;
ArrayList<CartFragParentModel> ListTerbaru;
ArrayList<ArrayList<CartFragChildModel>> ListChildTerbaru;

public CartFragExpandable (Context context, ArrayList<CartFragParentModel>ListTerbaru, ArrayList<ArrayList<CartFragChildModel>> ListChildTerbaru){
    this.context=context;
    this.ListTerbaru=ListTerbaru;
    this.ListChildTerbaru=ListChildTerbaru;

}
@Override
public boolean areAllItemsEnabled()
{
    return true;
}


@Override
public CartFragChildModel getChild(int groupPosition, int childPosition) {
    return ListChildTerbaru.get(groupPosition).get(childPosition);
}

@Override
public long getChildId(int groupPosition, int childPosition)
{
    return childPosition;
}

@Override
public View getChildView(int groupPosition, final int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {

    final CartFragChildModel childTerbaru = getChild(groupPosition, childPosition);

    CartFragExpandable.ViewHolder holder= null;
    notifyDataSetChanged();

    if (convertView == null) {
        LayoutInflater infalInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = infalInflater.inflate(R.layout.row_item_cart_child, null);

        holder=new CartFragExpandable.ViewHolder();
        holder.item_detail_tv = (TextView)convertView.findViewById(R.id.item_detail_tv);

        convertView.setTag(holder);
    }
    else{
        holder=(CartFragExpandable.ViewHolder)convertView.getTag();
    }

    String quantity = childTerbaru.getQuantity();
    String name = childTerbaru.getName();
    String price = childTerbaru.getPrice();
    String symbol = childTerbaru.getSymbol();
    holder.item_detail_tv.setText(quantity+"x "+name+" + "+symbol+price);

    return convertView;
}
@Override
public int getChildrenCount(int groupPosition) {
    return ListChildTerbaru.get(groupPosition).size();

}

@Override
public CartFragParentModel getGroup(int groupPosition) {
    return ListTerbaru.get(groupPosition);
}

@Override
public int getGroupCount() {
    return ListTerbaru.size();
}

@Override
public long getGroupId(int groupPosition) {
    return groupPosition;
}

@Override
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {


    CartFragParentModel terbaruModel = (CartFragParentModel) getGroup(groupPosition);
    CartFragExpandable.ViewHolder holder= null;
    if (convertView == null) {
        LayoutInflater infalInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = infalInflater.inflate(R.layout.row_item_cart_parent, null);

     /*   ExpandableListView mExpandableListView = (ExpandableListView) parent;
        mExpandableListView.expandGroup(groupPosition);*/

        holder=new CartFragExpandable.ViewHolder();
        holder.name_tv=(TextView)convertView.findViewById(R.id.name_tv);
        holder.price_tv = (TextView)convertView.findViewById(R.id.price_tv);

        convertView.setTag(holder);

    }

    else{
        holder=(CartFragExpandable.ViewHolder)convertView.getTag();
    }
    String quantity = terbaruModel.getItem_quantity();
    String name = terbaruModel.getItem_name();
    String price = terbaruModel.getItem_price();
    String symbol = terbaruModel.getItem_symbol();

    holder.name_tv.setText(name+" x"+quantity);
    holder.price_tv.setText(symbol+price);

    return convertView;
}

@Override
public boolean hasStableIds() {
    return true;
}

@Override
public boolean isChildSelectable(int arg0, int arg1) {
    return true;
}

static class ViewHolder{
    TextView name_tv,price_tv,item_detail_tv;
}
公共类CartfrageExpandable扩展了BaseExpandableListAdapter{ 语境; ArrayList ListTerbaru; ArrayList ListChildTerbaru; 公共CartFragExpandable(上下文上下文、ArrayListListTerbaru、ArrayListChildTerbaru){ this.context=context; this.ListTerbaru=ListTerbaru; this.ListChildTerbaru=ListChildTerbaru; } @凌驾 公共布尔值areAllItemsEnabled() { 返回true; } @凌驾 公共CartFragChildModel getChild(int-groupPosition,int-childPosition){ 返回ListChildTerbaru.get(groupPosition).get(childPosition); } @凌驾 公共长getChildId(int-groupPosition,int-childPosition) { 返回子位置; } @凌驾 公共视图getChildView(int-groupPosition,final int-childPosition,boolean isLastChild,View-convertView,ViewGroup-parent){ 最终CartFragChildModel childTerbaru=getChild(groupPosition,childPosition); CartFragExpandable.ViewHolder=null; notifyDataSetChanged(); if(convertView==null){ LayoutInflater infalInflater=(LayoutInflater)context.getSystemService(context.LAYOUT\u INFLATER\u SERVICE); convertView=infalInflater.flate(R.layout.row\u item\u cart\u child,空); holder=新的CartFragExpandable.ViewHolder(); holder.item\u detail\u tv=(TextView)convertView.findViewById(R.id.item\u detail\u tv); convertView.setTag(支架); } 否则{ holder=(CartFragExpandable.ViewHolder)convertView.getTag(); } 字符串数量=childTerbaru.getQuantity(); String name=childTerbaru.getName(); 字符串price=childTerbaru.getPrice(); String symbol=childTerbaru.getSymbol(); 持有者项目详细信息设置文本(数量+“x”+名称+“+”符号+价格); 返回
 if (!allJsonObject.has("extraItem")) { 
       cartProgress.setVisibility(View.GONE); 
       ListChild.add(listChildData); 
  } 
@Override
public int getChildrenCount(int groupPosition) {
         return ListChildTerbaru.get(groupPosition).size();
       }