ArrayList <object>包含不同的ArrayLists Nullpointer </object>

时间:2014-05-14 15:06:15

标签: java android object arraylist

我想要运行一个ArrayList&lt; Object&gt;其中包含一些不同类型的ArrayList。但每个类型都由ItemProperties扩展,其中包含有关类型的基本信息,如名称和图片(.getName()和.getPicture())。

ArrayList<Object> lists = new ArrayList<Object>();
lists.add(listType1); //Class Type1 extends ItemProperties
lists.add(listType2); //Class Type2 extends ItemProperties
lists.add(listType3); //Class Type3 extends ItemProperties

for (Object o : lists) {
    ArrayList<ItemProperties> al = (ArrayList<ItemProperties>) o;
    for (ItemProperties p : al) { //Nullpointer Exception here
        if (getString(p.getName()).toLowerCase().contains(arg0.toLowerCase())) {
            Drawable icon = getResources().getDrawable(p.getPicture());
            TextView tv = new TextView(this);
            tv.setTextSize(20);
            tv.setTextColor(Color.WHITE);
            tv.setGravity(Gravity.CENTER_VERTICAL);
            tv.setText(p.getName());
            ll.addView(tv); //LinearLayout ll
            icon.setBounds(0, 0, tv.getLineHeight() * 3, tv.getLineHeight() * 3);
            tv.setCompoundDrawables(icon, null, null, null);
        }
    }

我怎样才能让它发挥作用?

3 个答案:

答案 0 :(得分:1)

NullPointerException与您设置列表的方式无关。但是,如果您所说的是正确的,那么第一个列表将包含列表,而这些列表将包含扩展ItemProperties的元素,那么您应该为其键入列表。

List<List<ItemProperties>> lists = new ArrayList<List<ItemProperties>>();

答案 1 :(得分:0)

声明变量但未创建对象时会发生 NullPointerException 。当您尝试使用指向内存中没有位置的引用时,就会发生此异常,就像引用对象一样。

NullPointerException 本身足以告诉您尚未正确初始化ArrayList。如果您仍有问题,请发布stackTrace()

答案 2 :(得分:-1)

我有一些改进当前代码的建议。您可以使用以下语法更强烈地键入它,而不是定义用于保存列表的对象列表:

ArrayList< ArrayList<? extends ItemProperties> > lists = new ArrayList<>();

所以现在当你循环浏览列表时,你不必在for-each循环中输入你的元素。

 for (ArrayList<? extends ItemProperties> o : lists) {
     // Do something
 }