2013-08-30 1 views
0

У меня есть немного проблем с реализацией 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(); 

Но я не позволил сделать это, так как я сделал конструктор.

ответ

0

Создать дополнительный конструктор для случаев использования вы не используете Parcel построить свой объект, например

public class Player implements Parcelable{ 
    /* ... */ 

    public Player(Parcel source){ 
     /* ... */ 
    } 

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

Тогда вы можете создавать объекты как с Parcel и использованием int и String:

final Player aPlayer = new Player(10000, "SomeRandomPlayerName"); 

Кроме того, вы читаете int и String в обратном порядке, как вы их пишете.

+0

Спасибо большое! Не могли бы вы просто объяснить последнее предложение? Что вы понимаете, прочитав их в обратном порядке? – Guy

+0

Это означает, что когда вы пишете парцеллу, вы делаете ее в порядке 'String, int'. Когда вы читаете его, вы читаете строку 'int, String'. – Geobits

+0

Это связано с вашим вопросом, но ваш код в целом, вы пишете на посылку, используя 'dest.writeString (name)', за которым следует 'dest.writeInt (оценка)', в то время как вы читаете с сайта, используя 'source.readInt()' за которым следует 'source.readString()'. Поэтому вы читаете его в другом порядке, чем вы его пишете. – dst

Смежные вопросы