android - 为什么从一项 Activity 传递可分包数据并在另一项 Activity 中接收部分修改的数据?

标签 android android-intent parcelable

将可打包数据从一个 Activity 传递到另一个 Activity ,而在 Activity2 中我需要获取传递的数据。它被部分修改(arraylist 部分)

我设置这些值 年 19.99 同时收到这样的结果 null null 1.3796130171011302E-306

 Intent intent = new Intent(getActivity(), Activity2.class);
 intent.putExtra("SELECTED_ITEM", item);


public class Activity2 extends FragmentActivity 

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    Intent data = getIntent();
    selectedItem = data.getExtras().getParcelable("SELECTED_ITEM");

}
}


@Element(name = "data")
public class Data  implements Parcelable {
    @Element(name = "ID")
    private String id;
    @ElementList(name = "iap_subscription_packages", required = false)
    private ArrayList<Subscription> iapSubscription;



    Data() {
    }

    Data(Parcel in) {
        readFromParcel(in);
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }
    public ArrayList<Subscription> getSubscription() {
        return subscription;
    }

    public void setSubscription(ArrayList<Subscription> subscription) {
        this.iapSubscription = iapSubscription;
    }

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(id);
        dest.writeList(iapSubscription);

    }

    private void readFromParcel(Parcel in) {

        id = in.readString();
        iapSubscription = new ArrayList<Subscription>();
        if (iapSubscription != null) {
            in.readTypedList(iapSubscription, Subscription.CREATOR);
        }
    }

    public static final Parcelable.Creator CREATOR = new Parcelable.Creator() {
        public Data createFromParcel(Parcel in) {
            return new Data(in);
        }

        public Data[] newArray(int size) {
        return new Data[size];
    }


   };

}




@Element(name = "package")
public class Subscription  implements Parcelable {
    Subscription() {
    }

    Subscription(Parcel in) {
        readFromParcel(in);
    }

    @Element(name = "cycle", required = false)
    private String cycle;
    @Element(name = "name", required = false)
    private String name;
    @Element(name = "price", required = false)
    private double subscriptionPrice;

    public String getCycle() {
        return cycle;
    }

    public void setCycle(String cycle) {
        this.cycle = cycle;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public double getSubscriptionPrice() {
        return subscriptionPrice;
    }

    public void setSubscriptionPrice(double subscriptionPrice) {
        this.subscriptionPrice = subscriptionPrice;
    }
@Override
public int describeContents() {
    return 0;
}

@Override
public void writeToParcel(Parcel dest, int flags) {

    dest.writeString(cycle);
    dest.writeString(name);
    dest.writeDouble(subscriptionPrice);
    Log.i("subscription", "writeToParcel " + cycle + " " + name + " " + subscriptionPrice);
}

private void readFromParcel(Parcel in) {

   cycle = in.readString();
    name = in.readString();
    subscriptionPrice = in.readDouble();
    Log.i("subscription", "readFromParcel " + cycle + " " + name + " " + subscriptionPrice);
}

public static final Parcelable.Creator CREATOR = new Parcelable.Creator() {
    public Subscription createFromParcel(Parcel in) {
        return new Subscription(in);
    }

    public Subscription[] newArray(int size) {
        return new Subscription[size];
    }
    };
}

最佳答案

您发布的代码是您实际测试的代码吗?

这个方法有一个错误:

public void setSubscription(ArrayList<Subscription> subscription) {
    this.iapSubscription = iapSubscription;
}

你可能想要这个:

public void setSubscription(ArrayList<Subscription> subscription) {
    this.iapSubscription = subscription;
}

我复制了你的代码并测试了与Parceleable相关的部分。这似乎是正确的。我能够打包和解包订阅的 ArrayList。

如果您仍然遇到问题,请发布您为此 Intent 构建 bundle 的位置的代码。

关于android - 为什么从一项 Activity 传递可分包数据并在另一项 Activity 中接收部分修改的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31306024/

相关文章:

android - 查找当前位置在使用 Wifi 时有效,但在使用 GPS 时失败

java - 创建显示空指针异常的新 Intent

java - 单击菜单项按钮时打开新 Activity 不起作用

java - 写入/读取 Parcelable 对象的 ArrayList

Android setText 无法显示来自数据库的字符串

android - 按后退键返回上一个 View

android - ListView 中的多个文件下载管理器 +progress/pause/resume android

java - ZXING Android嵌入式IntentIntegrator的使用

android - 如何将 Parcel.readTypedList() 与 kotlin-android-extensions 中的 @Parcelize 一起使用?

java - 如何分包自定义arraylist?