2

我有一个客户对象类,我需要将它从一个活动传递到另一个活动。我使用 parcelable 来帮助我做到这一点,但我遇到了一些问题

1)双数组变量#(现在的主要问题)

我可以writeDoubleArray但我不能readDoubleArray

这条线in.readDoubleArray();用红色下划线表示:

readDoubleArray(double[])Parcel 类型中的方法不适用于参数 ()”

2) 日历变量

我不知道用什么函数来写日历所以我只是试过writeValue 我没有测试它是否正常工作。我需要这方面的建议

3) 可绘制变量

我的对象中有一个可绘制属性,我已经搜索了一个解决方案并使用了它,但当前的那个说它已被折旧。所以我也不确定它是否会起作用。我也需要这方面的建议

我希望你能帮助我。谢谢!


我的代码:


          //My attributes
public class Event {

    public int eventID;
    public String eventName;
    public String eventDesc;
    public String category;
    public String vendor;
    public String venue;
    public Calendar startDateTime;
    public Calendar endDateTime;
    public Drawable eventImage;
    public double[] price;
    public double lat;
    public double lng;


           ....
           //Other constructors here
           ....
   
     public void writeToParcel(Parcel dest, int flags) {
                    dest.writeInt(eventID);
                    dest.writeString(eventName);
                    dest.writeString(eventDesc);
                    dest.writeString(category);
                    dest.writeString(vendor);
                    dest.writeString(venue);
                    dest.writeValue(startDateTime);
                    dest.writeValue(endDateTime);
                    Bitmap bitmap = (Bitmap) ((BitmapDrawable) eventImage).getBitmap();
                    dest.writeParcelable(bitmap,flags);
                    dest.writeDoubleArray(price);
                    dest.writeDouble(lat);
                    dest.writeDouble(lng);
                }
                
    private void readFromParcel(Parcel in) { 
                     
                    eventID = in.readInt();
                    eventName = in.readString();
                    eventDesc = in.readString();
                    category = in.readString();
                    vendor = in.readString();
                    venue = in.readString();
                    startDateTime = (Calendar) in.readValue(getClass().getClassLoader());
                    endDateTime = (Calendar) in.readValue(getClass().getClassLoader());
                    Bitmap bitmap= (Bitmap)in.readParcelable(getClass().getClassLoader());
                    eventImage = new BitmapDrawable(bitmap);
                    price = in.readDoubleArray();
                    lat = in.readDouble();
                    lng = in.readDouble();
                }
4

2 回答 2

4

您正在尝试使用需要参数的方法读取双精度数组。使用时,readDoubleArray(double[])您需要在调用作为参数传入该数组的方法之前创建数组(足够长)。

当您不想自己创建数组时,请使用in.createDoubleArray()而不是in.readDoubleArray(double[]).

对于 Calendar 对象,您可以使用Parcel.writeSerializable(Serializable)- 方法,因为 Calendar 类实现了 Serializable 接口。

于 2012-06-15T11:39:43.230 回答
1

用于读取双数组和日历

private double[] mDoubleArray;
private Calendar mCalendar;

private void readFromParcel(Parcel source) {
mDoubleArray= new double[source.readDouble()];
Calendar instance = Calendar.getInstance();
instance.setTimeInMillis(source.readLong());
mGroupKey = instance;
}

    @Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeDoubleArray(mDoubleArray == null || mDoubleArray.length == 0 ? new double[] {} : mDoubleArray);  
dest.writeLong(mCalendar.getTimeInMillis());

}
于 2015-01-12T12:11:21.770 回答