问题描述
我想从一个意图传递到另一个Parcelable数据,这是我得到的错误:
08-31 14:12:22.709:E / AndroidRuntime(9931):致命异常:主要
08-31 14:12:22.709:E / AndroidRuntime(9931):java.lang.RuntimeException的:无法启动的活动ComponentInfo {com.matejsoftware.cardscoretracker / com.matejsoftware.cardscoretracker.Igra}:android.os.BadParcelableException:Parcelable协议要求称为类com.matejsoftware.cardscoretracker.Novaigra $玩家对CREATOR一个Parcelable.Creator对象
的事情是:我确实有Parcelable.Creator对象。我会后整个Parcelable $ C $低于C:
公共类播放器实现Parcelable {
字符串名称;
INT得分;
@覆盖
公众诠释describeContents(){
// TODO自动生成方法存根
返回0;
}
@覆盖
公共无效writeToParcel(包裹DEST,INT标志){
dest.writeString(名称);
dest.writeInt(分);
}
公开播放器(宗源){
得分= source.readInt();
NAME = source.readString();
}
公开播放器(INT得分,字符串名称){
this.score =得分;
this.name =名称;
}
}
公共类MyCreator实现Parcelable.Creator<播放器> {
@覆盖
公共球员createFromParcel(宗源){
返回新的播放器(源);
}
@覆盖
公开播放器[] newArray(INT尺寸){
返回新玩家【尺寸】;
}
}
时有事端错的造物主吗?这个应用程序,一旦崩溃,我按一下按钮,开始下一个活动。
这是我如何检索中的第二个活动Parcelable数据:
//全局变量
ArrayList的<播放器> playersParceledData;
//这是在的onCreate
playersData = getIntent();
playersParceledData = playersData.getParcelableArrayListExtra(parceledData);
此外,这是我怎么把类对象ParcelableArrayListExtra:
玩家newPlayer =新播放器(0,文本);
playersParceledData.add(newPlayer);
zacniIgro.putParcelableArrayListExtra(parceledData,playersParceledData);
我亲爱的朋友你是不是维护包裹序列
在方法 writeToParcel
你首先把字符串,但在构造你把第一个整数它不是在Android的有效,我已经给你code,这使得正确的顺序将数据放入到包裹
访问此链接
所以正确的code是
刚刚替换
公共类FriendDetail实现Parcelable {
私人字符串FULL_NAME;
私人诠释隐私;
公共HeatFriendDetail(包裹中){
this.full_name = in.readString();
this.privacy = in.readInt();
}
公共HeatFriendDetail(){
}
@覆盖
公共无效writeToParcel(包裹DEST,INT标志){
dest.writeString(this.full_name);
dest.writeInt(this.privacy);
}
公共静态最终Parcelable.Creator CREATOR =新Parcelable.Creator(){
公共HeatFriendDetail createFromParcel(包裹中){
返回新HeatFriendDetail(中);
}
公共HeatFriendDetail [] newArray(INT尺寸){
返回新HeatFriendDetail【尺寸】;
}
};
//吸气剂SETTER //
}
I am trying to pass Parcelable data from one intent to another and this is the error I am getting:
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
The thing is: I do have Parcelable.Creator object. I'll post the whole Parcelable code below:
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];
}
}
Is there somethin wrong with the CREATOR? The app crashes as soon as I click the button to start the next activity.
This is how I "retrieve" Parcelable data in the second activity:
//global variable
ArrayList<Player> playersParceledData;
//This is in onCreate
playersData = getIntent();
playersParceledData = playersData.getParcelableArrayListExtra("parceledData");
Also, this is how I put class objects to ParcelableArrayListExtra:
Player newPlayer = new Player(0, text);
playersParceledData.add(newPlayer);
zacniIgro.putParcelableArrayListExtra("parceledData", playersParceledData);
my dear friendsyou are not maintain the sequence in parcel
in method writeToParcel
you first put String but in Constructor you take first integer it is not valid in android, I have give you code which makes correct order to putting data in to Parcel
visit this link
so correct code is
just Replace with
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//
}
这篇关于Parcelable协议要求一个Parcelable.Creator对象调用CREATOR(我有CREATOR)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!