У меня есть немного проблем с реализацией 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 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. Теперь я пытаюсь создать новый объект класса:
Player newPlayer = new Player(null);
newPlayer.name = text;
newPlayer.score = 0;
playersParceledData.add(newPlayer);
zacniIgro.putParcelableArrayListExtra("parceledData", playersParceledData);
Это линия, которая беспокоит меня:
Player newPlayer = new Player(null);
Является ли тот факт, что я просто insrted «нуль» в порядке? Или мне нужно вставить что-то еще между этими()? Я следовал this example, и это не объясняется в нем. Это говорит о том, что новый объект должен быть создан так:
Player newPlayer = new Player();
Но я не позволил сделать это, так как я сделал конструктор.
Спасибо большое! Не могли бы вы просто объяснить последнее предложение? Что вы понимаете, прочитав их в обратном порядке? – Guy
Это означает, что когда вы пишете парцеллу, вы делаете ее в порядке 'String, int'. Когда вы читаете его, вы читаете строку 'int, String'. – Geobits
Это связано с вашим вопросом, но ваш код в целом, вы пишете на посылку, используя 'dest.writeString (name)', за которым следует 'dest.writeInt (оценка)', в то время как вы читаете с сайта, используя 'source.readInt()' за которым следует 'source.readString()'. Поэтому вы читаете его в другом порядке, чем вы его пишете. – dst