gpt4 book ai didi

java - Android:Parcelable 不返回任何内容

转载 作者:行者123 更新时间:2023-11-30 08:44:26 25 4
gpt4 key购买 nike

我有以下问题:我想将一个对象从一个 Activity 打包到另一个 Activity 。

就是这个对象:

public class Item implements Parcelable {

private int minimumAmountOfItems;
private String nameOfItem;
private int maximumAmountOfItems;
private int actualAmountOfItems;

public Item(int minimumAmountOfItems, String nameOfItem, int maximumAmountOfItems, int actualAmountOfItems){
this.minimumAmountOfItems = minimumAmountOfItems;
this.nameOfItem = nameOfItem;
this.maximumAmountOfItems = maximumAmountOfItems;
this.actualAmountOfItems = actualAmountOfItems;
}

使用以下可打包的编码内容:

 @Override
public int describeContents() {
/*Necessary for the parcelable stuff; but not needed in about 99.9% of the cases (source: Stack Overflow)*/
return 0;
}

@Override
public void writeToParcel(Parcel dest, int flags) {
/*Store the data in a parcelable object to communicate between Activities */
dest.writeInt(this.minimumAmountOfItems);
dest.writeString(this.nameOfItem);
dest.writeInt(this.maximumAmountOfItems);
dest.writeInt(this.actualAmountOfItems);

}

private Item(Parcel in){

/*Retrieve the data that was packaged before*/

this.minimumAmountOfItems = in.readInt();
this.nameOfItem = in.readString();
this.maximumAmountOfItems = in.readInt();
this.actualAmountOfItems = in.readInt();
}

public static final Parcelable.Creator<Item> CREATOR = new Parcelable.Creator<Item>(){
/*This small part of code passes along the unmarshalled parcel and returns the next object.*/
@Override
public Item createFromParcel(Parcel in){
return new Item(in);
}

@Override
public Item[] newArray(int size){
return new Item[size];
}
};

因此,我在我的 Activity 中使用以下代码来打包我的对象:

resultIntent = new Intent(ItemCreatorActivity.this, ItemListEditorActivity.class);
resultIntent.putExtra("Item", item);
startActivity(resultIntent);

为了得到我想要实现的一切:

Intent inputIntent = getIntent();
Item passedItem = inputIntent.getExtras().getParcelable("Item");
System.out.println(passedItem.getNameOfItem());

现在我有几个问题:

1.) 我如何检查从发件人到收件人的可包裹信息是否有效?我认为我已经从本教程中获得了关于可打包对象的所有重要信息:https://coderwall.com/p/vfbing/passing-objects-between-activities-in-android其他几个(出于可读性的目的,我不会在这里发布它们,因为它们都描述了相同的过程和结构......);但我的 System.out.println(passedItem.getNameOfItem()) 仍然没有抛出任何东西。我的 AndroidMonitor 中没有更多消息。

2.) 我调用此 Activity 一次,当时我还没有创建 Item 对象。是否有更“平滑”的方法来防止此代码中第一次调用 Activity 时出现空指针异常?

3.) 当我按下一个按钮,切换到一个新的 Activity,创建一个 Item 对象并想象一下,我的代码以前可以工作,我可以将我的对象传递回调用 Activity。我之前从调用 Activity 保存在 ArrayList 中的所有对象是否仍然可用,还是我必须将我的 ArrayList 传递给新 Activity,然后返回给调用 Activity?

提前感谢您的帮助。

最好的问候

最佳答案

您正在 Intent 中添加可打包对象并从 Bundle 中检索它(inputIntent.getExtras() 返回 Bundle 类型的对象)。

所以需要改成inputIntent.getParcelableExtra("Item");

3.) 当我按下一个按钮,切换到一个新的 Activity,创建一个 Item 对象并想象一下,我的代码以前可以工作,我可以将我的对象传递回调用 Activity。我之前从调用 Activity 保存在 ArrayList 中的所有对象是否仍然可用,还是我必须将我的 ArrayList 传递给新 Activity,然后返回给调用 Activity?

是的。您可以将 ArrayList 添加到 Intent 对象:

ArrayList<Item> itemList = new ArrayList<Item>();
// Add elements to the list
intent.putParcelableArrayListExtra("Item_List", itemList);

并检索它:

ArrayList<Item> itemList = inputIntent.getParcelableArrayListExtra("Item_List");

关于java - Android:Parcelable 不返回任何内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33769308/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com