Я пытаюсь передать Parcelable данные от одного намерения к другому, и это ошибка я получаю:Parcelable протокол требует объект Parcelable.Creator под названием CREATOR (у меня есть CREATOR)
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);
Я рекомендовал использовать ArrayList> потому что оно не требует, чтобы преобразовать вы можете легко переносить между различными видами деятельности с использованием getSeriasableExtra(). Поскольку я вижу ваш код, у вас нет каких-либо сложных данных для хранения, поэтому нет смысла создавать специальный POJO для хранения. –
@BirajZalavadia не могли бы вы дать мне быстрый пример того, как мой код будет выглядеть с помощью HashMap? Я никогда не использовал это раньше, и я не могу понять, как использовать его из официальных документов. – Guy
Ваш класс 'player' не объявляет статический член' CREATOR'. Он объявляет только реализацию класса Creator ('MyCreator'). Помимо исправления последовательности, вам нужно добавить член 'CREATOR' в' player'. – Les