当前位置: 首页 > 面试题库 >

可打包协议需要一个名为CREATOR的Parcelable.Creator对象(我确实有CREATOR)

郭洋
2023-03-14
问题内容

我正在尝试将Parcelable数据从一种意图传递到另一种意图,这是我得到的错误:

08-31 14:12:22.709: E/AndroidRuntime(9931): FATAL EXCEPTION: main
08-31 14:12:22.709: E/AndroidRuntime(9931): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.matejsoftware.cardscoretracker/com.matejsoftware.cardscoretracker.Igra}: android.os.BadParcelableException: Parcelable protocol requires a Parcelable.Creator object called  CREATOR on class com.matejsoftware.cardscoretracker.Novaigra$Player

事情是:我确实有Parcelable.Creator对象。我将在下面发布整个Parcelable代码:

public class Player implements Parcelable{
    String name;
    int score;
    @Override
    public int describeContents() {
        // TODO Auto-generated method stub
        return 0;
    }
    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(name);
        dest.writeInt(score);
    }

    public Player(Parcel source){
        score = source.readInt();
        name = source.readString();
    }

    public Player(int score, String name){
        this.score = score;
        this.name = name;
    }
}

public class MyCreator implements Parcelable.Creator<Player> {

    @Override
    public Player createFromParcel(Parcel source) {
        return new Player(source);
    }

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

}

创建者有什么问题吗?单击按钮以开始下一个活动时,应用程序崩溃。

这是我在第二个活动中“检索” Parcelable数据的方式:

//global variable
ArrayList<Player> playersParceledData;

//This is in onCreate
playersData = getIntent();
playersParceledData = playersData.getParcelableArrayListExtra("parceledData");

另外,这就是我将类对象放入ParcelableArrayListExtra的方式:

Player newPlayer = new Player(0, text);
playersParceledData.add(newPlayer);
zacniIgro.putParcelableArrayListExtra("parceledData", playersParceledData);

问题答案:

从包裹中读取的顺序与您输入的顺序不同。

writeToParcel()你第一次把字符串,但在HeatFriendDetail(Parcel in),你先读整数。这不是正确的方法,因为顺序或读/写很重要。

以下是在与包裹之间进行数据读写的正确顺序的代码(另请参见此链接):

public class FriendDetail implements Parcelable {

    private String full_name;
    private int privacy;

    public HeatFriendDetail(Parcel in) {
        this.full_name = in.readString();
        this.privacy = in.readInt();
    }

    public HeatFriendDetail() {

    }

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

        dest.writeString(this.full_name);
        dest.writeInt(this.privacy);
    }

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

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

    // GETTER SETTER//
}


 类似资料:
  • 我刚刚安装了Qt5.5,并且是第一次在OS X上使用Qt Creator,当我第一次安装Qt时,它给了我一个错误信息“Xcode 5 not installed”,我觉得这很奇怪,(我有Xcode 7 beta),但是安装成功地完成了。

  • 公共类请求参数{ } 当我在URL为“param2=ffffhhh”的情况下测试上述方法时

  • 我还不明白的是,喷口是否也是这样。如果一个spout发出一个元组(即,spout中的函数被执行),并且spout运行的计算机在此后不久崩溃,该元组会被zookeeper复活吗?还是我们需要Kafka来保证这一点? 附注。我理解,在对的调用中,必须为spout发出的元组分配唯一的ID。 P.P.S.我在书中看到的示例代码使用之类的东西来跟踪哪些喷出的元组尚未被加密。这是不是自动被Zookeeper坚

  • 我在这里(有点)了解jdk 5 Reentry antLock的功能 但为什么我们想要一个“再进入者”锁呢?i、 e如果一个线程已经锁定了一个对象,为什么它需要再次获取它?

  • 我需要获取一个文件对象(不是流)来传递给库。我得到的是“URI不是分层的”。我见过一些解决方案,但它们要么效率很低,要么使用外部库。 File myFile=新文件(MyClass.class.getClassLoader()。getResource(目录)。toURI()) 顺便说一下,我需要传递到的对象 Lucene FSDirectory。打开(myFile) 有什么想法吗?

  • 我正在检查Angular Bootstrap UI,特别是服务并注意到一件有趣的事情。 在他们的示例中,'http://plnkr.co/edit/e5xykpqwytsljua6fxwt?p=preview',在附加到弹出窗口的控制器中,他们将选定的项包含到另一个内部属性中 为什么需要这个?JavaScript找到了什么? THX