【问题标题】:Can't instantiate parceable Object无法实例化可解析对象
【发布时间】:2017-06-01 00:52:10
【问题描述】:

我创建了一个 parceable 类,并希望将其用于从片段 A 到 B 的数据传输。我在许多其他教程中都这样做了,但我无法从 parceable 对象类实例化。它总是说,我必须输入“包裹”作为参数。

这是我的对象类:

public class DataObject implements Parcelable {

private int number1 = 0;
private int number2 = 0;
private String name = "";

public int getNumber1() {
    return number1;
}

public void setNumber1(int number1) {
    this.number1 = number1;
}

public int getNumber2() {
    return number2;
}

public void setNumber2(int number2) {
    this.number2 = number2;
}

public String getName() {
    return name;
}

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

protected DataObject(Parcel in) {
    number1 = in.readInt();
    number2 = in.readInt();
    name = in.readString();
}

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

@Override
public void writeToParcel(Parcel dest, int flags) {
    dest.writeInt(number1);
    dest.writeInt(number2);
    dest.writeString(name);
}

@SuppressWarnings("unused")
public static final Parcelable.Creator<DataObject> CREATOR = new Parcelable.Creator<DataObject>() {
    @Override
    public DataObject createFromParcel(Parcel in) {
        return new DataObject(in);
    }

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

以下是我如何使用这种类型的对象:

DataObject bla = new DataObject();
bla.setNumber1(1);
bla.setNumber2(2);
bla.setName("TestName");

当我将鼠标悬停在红色突出显示的构造函数上时,它会显示:

DataObject中的DataObject(Parcel)无法应用

编译器说:

Error:(30, 50) 错误:类中的构造函数 PointCardMainData PointCardMainData 不能应用于给定类型; 要求:包裹 发现:没有参数 原因:实际参数列表和形式参数列表的长度不同

有人知道缺少什么吗?我必须在清单 gradle-file 中设置一些东西吗?在构建项目之前我必须做些什么吗?

最好的问候

【问题讨论】:

    标签: java android serialization


    【解决方案1】:

    您只在DataObject 类中编写了一个构造函数,它指定了如何从Parcel 生成DataObject。现在您正在尝试制作一个没有包裹的DataObject。您需要要么Parcel 添加到DataObject bla = new DataObject();添加新的构造函数。

    所以你可以写

     Parcel theParcel = new Parcel();
     DataObject bla = new DataObject(theParcel);
    

    或者你的 DataObject 类中可能有一个构造函数,例如

    public DataObject(){
    }
    

    【讨论】:

    • THX。首先,我确定我尝试了您的(和 user3374345s)解决方案......我真的很想知道为什么它今天能正常工作。有时我觉得你必须重新启动 android studio 才能获得正确的行为......另一方面,我想知道为什么在大多数 parcealable Object 教程中没有提示,你有一个空的构造函数......
    【解决方案2】:

    在 DataObject 类中添加构造函数

    public DataObject()
    {}
    

    【讨论】:

    • 谢谢!这很容易:-P
    猜你喜欢
    • 1970-01-01
    • 2016-01-18
    • 2018-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-13
    • 2021-08-27
    相关资源
    最近更新 更多