Próbuję przekazać dane Parcelable z jednego do drugiego i zamiarem jest to błąd otrzymuję:Parcelable protokół wymaga obiektu Parcelable.Creator nazwie CREATOR (muszę 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
Rzecz : Mam obiekt Parcelable.Creator. Opublikuję cały kod Działka poniżej:
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];
}
}
Czy jest coś nie tak z Kreatorem? Aplikacja ulega awarii, gdy tylko kliknę przycisk, aby rozpocząć następną czynność.
To jak ja „odzyskać” dane Parcelable w drugiej działalności:
//global variable
ArrayList<Player> playersParceledData;
//This is in onCreate
playersData = getIntent();
playersParceledData = playersData.getParcelableArrayListExtra("parceledData");
Ponadto, jest to w jaki sposób mogę umieścić obiekty klasy do ParcelableArrayListExtra:
Player newPlayer = new Player(0, text);
playersParceledData.add(newPlayer);
zacniIgro.putParcelableArrayListExtra("parceledData", playersParceledData);
I zaleca się stosowanie ArrayList> ponieważ nie wymaga konwersji można łatwo przenosić między działaniami z użyciem getSeriasableExtra(). Ponieważ widzę twój kod, nie masz żadnych złożonych danych do zapisania, więc nie ma sensu zakładać specjalnego POJO do przechowywania. –
@BirajZalavadia, czy możesz podać mi krótki przykład na to, jak mój kod będzie wyglądał w HashMap? Nigdy wcześniej tego nie używałem i nie mogę naprawdę zobaczyć, jak używać tego z oficjalnych dokumentów. – Guy
Twoja klasa "player" nie deklaruje statycznego członu "CREATOR". Deklaruje jedynie implementację klasy Creator ('MyCreator'). Oprócz poprawienia sekwencji, musisz dodać człon "CREATOR" do "gracza". – Les