【问题标题】:Android - startActivityForResult passing ArrayList of an Object BackAndroid - startActivityForResult 传递对象的 ArrayList 返回
【发布时间】:2019-02-20 13:44:37
【问题描述】:

所以我有活动 A 和活动 B,在“A”中,我需要转到“B”,然后将食物项目添加到它们的数组列表中,然后将此数组列表传递回活动 A,我是如何得到的我当前设置的问题

这是从A到B的意图

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();

最后这是我在 A 中的 onActivityResults

    @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 只是一个将 Array 设置为新返回的 Array 的函数

这是食物对象

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");

这是说有一个“未经检查的演员表”,并且预期的用途不能正常工作,任何帮助将不胜感激

【问题讨论】:

  • 那么你的问题是什么?是关于 IDE 的警告还是您在 Activity A 中没有收到数据?
  • @SonTruong 没有得到任何数据,它抛出了一个类转换异常
  • 请检查我的答案。

标签: java android arrays


【解决方案1】:

不要使用 Serializable,而是使用 Parcelable。 Parcelable 是速度之王,并确保您的对象类实现 Parcelable。

【讨论】:

猜你喜欢
  • 2011-12-02
  • 1970-01-01
  • 2012-11-22
  • 2014-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-04
相关资源
最近更新 更多