ForLoop непрерывно зацикливается внутри метода переопределения Android - PullRequest
0 голосов
/ 03 декабря 2018

У меня есть Интерфейс , методы которого реализуются в других классах.Внутри этого метода у меня есть forLoop , чтобы проверить, существует ли элемент в конкретном списке, но что ForLoop непрерывно вызывает.
Вот мой код:

@Override
public void saveResultList(MyOrderResultPOJO myOrderResultPOJO) {

    myOrderResultList.add(myOrderResultPOJO);


    checkItemId(myOrderResultPOJO);

    //myOrderResultHashMap.put(inventoryClassificationId, myOrderResultList);
    setMyOrderResultListNew(myOrderResultList);
}

private boolean checkItemId(MyOrderResultPOJO myOrderResultPOJO){
    boolean v=false;

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

        if (myOrderResultList.get(i).getItemId().equals(myOrderResultPOJO.getItemId())) {
            myOrderResultList.add(i,myOrderResultPOJO);
            Log.d("myOrderResultList","entering");
            v=true;
        }
    }

    return v;

}

Интерфейс:

public interface MyOrderSubList {
    void addMtPcsSpinner(Context ctx, Spinner spinner);

    void showMessages(String message);

    void hideKeyBoards();

    void saveResultList(MyOrderResultPOJO myOrderResultPOJO);
}

Ответы [ 2 ]

0 голосов
/ 03 декабря 2018

Вы заканчиваете тем, что добавляете к size списка, что является условием вашего цикла for i<myOrderResultList.size():

myOrderResultList.add(i,myOrderResultPOJO); // not required

Таким образом, вы можете обновить его до

for (int i = 0; i < myOrderResultList.size(); i++) {
    if (myOrderResultList.get(i).getItemId().equals(myOrderResultPOJO.getItemId())) {
        Log.d("myOrderResultList", "entering");
        v = true;
    }
}
0 голосов
/ 03 декабря 2018

Вы должны просто вернуть true, если найдете совпадение.Вы определенно не хотите снова добавлять существующий элемент в List (myOrderResultList.add(i,myOrderResultPOJO); является причиной бесконечного цикла).

private boolean checkItemId(MyOrderResultPOJO myOrderResultPOJO)
{
    for (int i=0;i<myOrderResultList.size();i++) {
        if (myOrderResultList.get(i).getItemId().equals(myOrderResultPOJO.getItemId())) {
            Log.d("myOrderResultList","entering");
            return true;
        }
    }

    return false;    
}

Тем не менее, логика метода вызывающего (saveResultList) странно.Сначала вы добавляете элемент к List, а затем вызываете checkItemId(myOrderResultPOJO), который проверяет, существует ли он в List (и вы игнорируете значение, возвращаемое этим методом).Наверное, должно быть наоборот:

public void saveResultList(MyOrderResultPOJO myOrderResultPOJO) 
{
    if (!checkItemId(myOrderResultPOJO)) {
        myOrderResultList.add(myOrderResultPOJO);
    }

    setMyOrderResultListNew(myOrderResultList);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...