ArrayList.indexOf()无法识别对象

时间:2015-10-11 17:38:23

标签: android arraylist

我有一个ParseObject子类,但是每当我想得到它的索引时它返回0,所以mListSectionPos返回一个零的数组(hachCode和{{1由于Apache Commons Utils,实现了methd)。

它应该是equals,而是我正在使用String.valueOf(mListItems.indexOf(beer_section)),因为它正在运行(或多或少)。有时它会在mListSectionPos.add(mListItems.indexOf(current_item) - 1);方法上产生裂缝,但也适用于getCurrentSectionPosition()方法。

所以我的问题是:为什么indexOf()总是在这段代码中返回indexOf()

它基于https://github.com/bhavyahmehta/ListviewFilter - 仅适用于ParseObject列表。以下代码是我对0的{​​{1}}的改编here

MainActivity.java

PiwoSubclass

@Override
    protected Void doInBackground(ArrayList<PiwoSubclass>... params) {
        mListItems.clear();
        mListSectionPos.clear();
        ArrayList<PiwoSubclass> items = params[0];
        if(mItems != null) {
            if (mItems.size() > 0) {

                String prev_section = "";

                for (PiwoSubclass current_item : items) {
                    if (isCancelled()) break;
                    String current_section = current_item.getBeerName().substring(0, 1).toUpperCase(Locale.getDefault());

                    if (!prev_section.equals(current_section)) {
                        PiwoSubclass beer_section = null;
                        beer_section = new PiwoSubclass();
                        beer_section.setBeerName(current_section);

                        Log.i("ASD-current", beer_section.getBeerName());

                        mListItems.add(beer_section);
                        mListItems.add(current_item);

                        // array list of section positions
                        mListSectionPos.add(mListItems.indexOf(current_item) - 1); // that want works although it's way around



                        // TODO why is that error?
                        Log.i("ASD-listSectionSize", String.valueOf(mListItems.indexOf(beer_section)));

                        prev_section = current_section;
                    } else {
                        mListItems.add(current_item);
                    }
                }
            }
        }
        return null;
    }

现在我public class PiwoSubclass extends ParseObject { private String objectIdP; private String marka; private String marka_lowercase; public PiwoSubclass() { } public String getObjectIdfromParse() { return this.getObjectId(); } public String getMarka(){ return this.getString("marka"); } public String getBrewery(){ return this.getString("brewery"); } public String getBeerName(){ return this.getString("beer_name"); } public String getMarka_lowercase() { return this.getString("marka_lowercase"); } public void setMarka(String value){ put("marka", value); } public void setBeerName(String value){ put("beer_name", value); } public void setMarka_lowercase(String value){ put("marka_lowercase", value); } @Override public int hashCode() { return new HashCodeBuilder(17, 31) // two randomly chosen prime numbers // if deriving: appendSuper(super.hashCode()). .append(getObjectIdfromParse()) .toHashCode(); } @Override public boolean equals(Object obj) { //return super.equals(obj); if (!(obj instanceof PiwoSubclass)) return false; if (obj == this) return true; marka_lowercase = getMarka_lowercase(); PiwoSubclass rhs = (PiwoSubclass) obj; //Log.i("ASD-subclass", marka + "/" + rhs.getMarka()); return new EqualsBuilder() // if deriving: appendSuper(super.equals(obj)). .append(marka_lowercase, rhs.getMarka_lowercase()) .isEquals(); } 的{​​{1}}例外:

IndexOutOfBounds

1 个答案:

答案 0 :(得分:1)

首先,检查mItems

if(mItems != null) {
    if (mItems.size() > 0) {

但随后您使用items

for (PiwoSubclass current_item : items) {
    /* ... */
}

并忽略mItems以获取方法的其余部分。我没有看到这两者之间有任何联系。

indexOf()似乎没有返回0但是1,否则你会ArrayList充满-1 s

mListSectionPos.add(mListItems.indexOf(current_item) - 1);

我想,不知怎的,你总是检查第一个current_item,这是mListItems中的第二个元素。如果您要检查beer_section - 与原始代码中的current_section一样 - 代码将按预期工作。

在查看ArrayList.indexOf()后,最可能的原因是您的PiwoSubclass.equals()方法比较始终等于第一个非节元素,因为它没有设置啤酒名称或类似条件

因此,修复equals方法也可以。