簡體   English   中英

Android - startActivityForResult 傳回對象的 ArrayList

[英]Android - startActivityForResult passing ArrayList of an Object Back

所以我有活動 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();

最后這是我的 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 只是將 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");

它說有一個“未經檢查的演員”,並且它的預期用途不能正常工作,任何幫助將不勝感激

因為您從錯誤的意圖中獲取數據。 您應該從

Bundle b = getIntent().getExtras();
ArrayList<Food> test = new ArrayList<>();
test = (ArrayList<Food>) b.getSerializable("results");

ArrayList<Food> test = (ArrayList<Food>) data.getSerializableExtra("results");

不要使用Serializable,而應使用Parcelable。 Parcelable是速度之王,並確保您的對象類實現Parcelable。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM