2016-02-16 35 views
1

У меня есть вопрос о отправке объекта в другую деятельность. Я не уверен в этом, что я делаю. Поэтому у меня есть объект игрок в MainActivityПереходящий объект на другие виды деятельности

final Player player = new Player("Player", 150); 

У меня есть отдельный класс для игрока с простым конструктором

public class Player { 

private String playerName; 
private double playerCash; 

Player(String playerName, double playerCash) 
{ 
    this.playerName = playerName; 
    this.playerCash = playerCash; 
} 

И у меня есть вторая активность, где я хочу использовать объект игрока. Я сделал кнопку в MainActivity с этим кодом

mButton = (Button) findViewById(R.id.mButton); 
    mButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Intent intent = new Intent(MainActivity.this, SecondActivity.class); 
      intent.putExtra("player", player); 
      startActivity(intent); 
     } 
    }); 

А теперь я получил проблему «не удается разрешить метод putExtra». Что я делаю не так? Я хочу только один объект Player и хочу использовать его в нескольких действиях, но понятия не имею, как это сделать. За любую помощь большое спасибо;)

+0

Вы не можете передать объект в putExtra с намерением. Boolean, int, Strings и т. Д. Разрешены. – drWisdom

+0

вы должны реализовать Serializable на своем классе и перенести его как сериализуемый –

+2

. Вашему объекту необходимо реализовать интерфейс Serializable или Parcelable. –

ответ

1

Все, что упоминалось в ответах выше, очень четко описывает решение. Вот код:

public class Player implements Parcelable{ 
private String playerName; 
private double playerCash; 

    // Constructor 
    public Player(String playerName, double playerCash){ 
     this.playerName = playerName; 
     this.playerCash = playerCash; 
    } 
    // Implement Getter and setter methods 


    // Parcelling part 
    public Player(Parcel in){ 
     this.playerName = in.readString(); 
     this.playerCash = in.readDouble(); 
    } 

    @Оverride 
    public int describeContents(){ 
     return 0; 
    } 

    @Override 
    public void writeToParcel(Parcel dest, int flags) { 
     dest.writeString(playerName); 
     dest.writeDouble(playerCash); 
    } 
    public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { 
     public Player createFromParcel(Parcel in) { 
      return new Player(in); 
     } 

     public Player[] newArray(int size) { 
      return new Player[size]; 
     } 
    }; 
} 
0

Передача в пользовательских объектах несколько сложнее. Вы можете просто отметить класс как Serializable и позволить Java позаботиться об этом.

Однако на андроиде есть серьезный удар по производительности, который приходит с использованием Serializable. Решение заключается в использовании Parcelable. Перейдите по этой ссылке для деталей реализации: http://shri.blog.kraya.co.uk/2010/04/26/android-parcel-data-to-pass-between-activities-using-parcelable-classes/

0

Вы можете использовать parcelable для этого, посмотрите на мой пост здесь: https://stackoverflow.com/a/35252575/982161

, так что вам нужно сделать некоторые изменения в классе игроков.

0

Сделать один Сериализуемого класс

import java.io.Serializable; 

@SuppressWarnings ("последовательный") класса MyPlayer общественности реализует Serializable {

частной строка Playername; частный двойной игрокCash;

public MyPlayer(String playerName, double playerCash) { 
    this.playerName = playerName; 
    this.playerCash = playerCash; 
} 

public String getPlayerName() { 
    return playerName; 
} 

public void setPlayerName(String playerName) { 
    this.playerName = playerName; 
} 

public double getPlayerCash() { 
    return this.playerCash; 
} 

public void setPlayerCash(double playerCash) { 
    this.playerCash = playerCash; 
} 

}

затем в вашей кнопки мыши поместить

mButton = (Button) findViewById(R.id.mButton); 
mButton.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     MyPlayer myPlayer = new MyPlayer(playerName,playerCash); 
     Intent i = new Intent(MainActivity.this, SecondActivity.class); 
     i.putExtra("key", myPlayer); 
     startActivity(i); 
    } 
}); 

Чтобы Зачет использовать данные (во второй активности)

Intent i = getIntent(); 

MyPlayer myPlayer = (MyPlayer) я. getSerializableExtra ("ключ");

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