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

标签 java android nullpointerexception parcelable

我遇到以下问题:我想将一个对象从一个 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];
    }
};

因此,我在 to 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.) 当我还没有创建 Item 对象时,我会调用此 Activity 一次。对于 Activity 的第一次调用,是否有更“平滑”的方法来防止此代码中出现空指针异常?

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

感谢您提前提供的帮助。

致以诚挚的问候

最佳答案

您正在 Intent 中添加 Parcelable 对象并从 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/

相关文章:

c# - Xamarin Android : getting color value from colors. xml 以编程方式

java - 什么是NullPointerException,我该如何解决?

java - 自动装箱后将 null 分配给原始数据类型

java - BackdropFrameRenderer onResourcesLoaded() 上的 Android NPE

java - 如何在 Android Studio 中添加 Snap to Roads Google Map

java - Spring中创建的Proxy的Proxy

java - Proguard 是否会删除仅在一处使用的方法? [方法内联]

android - Android 应用程序运行时出现致命异常?

java - 带有 Windows AD 的 Tomcat 6 领域配置

java - java 中的 Collections.sort 对于任何类