Android - startActivityForResult, передающий ArrayList объекта обратно

Итак, у меня есть Activity A и Activity B, в «A» мне нужно перейти к «B», а затем добавить элементы Food в их arrayList, а затем передать этот список массивов обратно в Activity A, как бы у меня ни возникали проблемы с моим текущая настройка

Это намерение от А до Б.

Intent i = new Intent(OrderMain.this , OrderAdd.class);
startActivityForResult(i,1);

Это намерение возврата от B к A

Intent returnIntent = new Intent();
Bundle b = new Bundle();
b.putSerializable("results", orderArray);
returnIntent.putExtras(b);
setResult(Activity.RESULT_OK, returnIntent);
finish();

И, наконец, это мой onActivityResults In A

    @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == 1) {
        if (resultCode == Activity.RESULT_OK){
            Bundle b = getIntent().getExtras();
            ArrayList<Food> test = new ArrayList<>();
            test = (ArrayList<Food>) b.getSerializable("results");
            setOrderArray(test);
        }
        if (resultCode == Activity.RESULT_CANCELED) {
            //Write your code if there's no result
        }
    }
}

setOrderArray - это просто функция для установки массива в новый возвращаемый массив

А это пищевой объект

import java.io.Serializable;

public class Food implements Serializable{
    private String name;
    private int cost;
    private int quantity;

public Food( String name, int cost, int quantity){
        this.name = name;
        this.cost = cost;
        this.quantity = quantity;
    }
    public void setQuantity(int quantity)
    {
        this.quantity = quantity;
    }
    public void setName(String name)
    {
       this.name = name;
    }
    public void setCost(int cost)
    {
        this.cost = cost;
    }
    public int getTotal()
    {
        return cost * quantity;
    }
    public String getName ()
    {
        return name;
    }
    public int getCost()
    {
        return cost;
    }
    public int getQuantity()
    {
        return quantity;
    }
    public void addQuantity()
    {
        quantity++;
    }
    public void decQuantity()
    {
        quantity--;
    }
}

текущая проблема, которую я имею, находится в этой строке кода:

test = (ArrayList<Food>) b.getSerializable("results");

Он говорит, что есть "Unchecked Cast", и предполагаемое использование для этого не работает должным образом, любая помощь будет принята с благодарностью.

Так в чем твоя проблема? это о предупреждении от IDE или вы не получили данные в Activity A?

Son Truong 16.09.2018 14:29

@SonTruong не получил никаких данных и выдает classcastexception

Biomechanic 16.09.2018 14:37

пожалуйста, проверьте мой ответ.

Son Truong 17.09.2018 08:05
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
3
3
838
1

Ответы 1

Не используйте Serializable, вместо этого используйте Parcelable. Parcelable - король скорости, и убедитесь, что ваш объектный класс реализует Parcelable.

Вместо этого используйте раздел комментариев, если вы не собираетесь объяснять свое решение.

Zaid Mirza 16.09.2018 14:56

Было предложено использовать Parcelable, и если вы хотите знать почему, посмотрите это: developerphil.com/parcelable-vs-serializable

abhradeep ghosh 16.09.2018 15:03

Другие вопросы по теме