2017-11-05 3 views
-1

저는 실제적으로 카드 게임을하는 4 명의 플레이어의 점수를 추적하는 아주 기본적인 앱을 만들려고합니다. 내 생각은 각 플레이어에 대해 "플레이어"라는 클래스의 인스턴스를 만드는 것이 었습니다. 이제는 "이름"과 "점수"라는 변수 만 들어 있습니다. 이 기사 (http://sohailaziz05.blogspot.de/2012/04/passing-custom-objects-between-android.html)의 지시를 따라하고 "플레이어"클래스에서 Parcelable을 구현 :이 첫 번째 활동에 대한 코드 (I은 이상적으로는 4 일 또는한다, 여기에서 플레이어를 만드는 오전입니다다른 액티비티로 여러 객체 전달하기

public class Player implements Parcelable { 
    private String name; 
    private int score; 

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

    public String getPlayerName() { 
     return name; 
    } 

    public int getPlayerScore() { 
     return score; 
    } 

    public Player(Parcel in) { 
     String[] data = new String[2]; 

     in.readStringArray(data); 
     this.name = data[0]; 
     this.score = Integer.parseInt(data[1]); 

    } 

    @Override 
    public int describeContents() { 
     return 0; 
    } 

    @Override 
    public void writeToParcel(Parcel dest, int flags) { 

     dest.writeStringArray(new String[]{this.name, String.valueOf(this.score)}); 
    } 

    public static final Parcelable.Creator<Player> CREATOR = new Parcelable.Creator<Player>() { 

     @Override 
     public Player createFromParcel(Parcel source) { 
      return new Player(source); //using parcelable constructor 
     } 

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

} 

) 더 :

public class CreatePlayersScreen extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_create_players_screen); 
    } 

    public void startGame(View view) { 

     EditText editText1 = (EditText) findViewById(R.id.editText1); 
     String namePlayer1 = editText1.getText().toString(); 
     int scorePlayer1=0; 
     Player player1 = new Player(namePlayer1, scorePlayer1); 

     Intent intent=new Intent(this,ScoreScreen.class); 
     intent.putExtra("EXTRA_PLAYER_1",player1); 

     startActivity(intent); 
    }  
} 

나는이 첫 번째 활동에서 버튼을 누르면, "startGame"트리거되며, 플레이어 이름과 점수가 두 번째 활동 표시로되어있다 :

public class ScoreScreen extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_score_screen); 

     Player player1= getIntent().getParcelableExtra("EXTRA_PLAYER_1"); 

     String namePlayer1 = player1.getPlayerName(); 
     TextView textView1 = (TextView) findViewById(R.id.textView1); 
     textView1.setText(namePlayer1); 

     int scorePlayer1 = player1.getPlayerScore(); 
     TextView textView5 = (TextView) findViewById(R.id.textView5); 
     textView5.setText(scorePlayer1); 
    } 
} 
게임을 다시

가 무엇이 잘못 가고 열기 응용 프로그램을 중지 :이 실행할 때 내가 두 번째 활동으로 처음부터 얻을 수있는 버튼을 누르면 한 번

그래서, 나는 에뮬레이터에서 다음과 같은 오류 메시지가 ? 필자는 올바른 접근법을 사용하고 있거나 직렬화 가능을 사용해야합니까? 그리고 어떻게 두 번째 활동에 1, 4 개체를 전달할 수 있습니까?

당신의 도움에 감사 드리며, 저는 정말로 여기 붙어 있습니다 ... 고마워요!

+0

둘 이상의 것을 전달하려는 경우 'putExtra'를 두 번 이상 호출 할 수 있습니다 ... 어떤 경우이든간에 logcat –

답변

0

내가 일반적으로하는 방법입니다.

public void startGame(View view) { 
    EditText editText1 = (EditText) findViewById(R.id.editText1); 
    String namePlayer1 = editText1.getText().toString(); 
    int scorePlayer1 = 0; 
    Player player1 = new Player(namePlayer1, scorePlayer1); 
    EditText editText2 = (EditText) findViewById(R.id.editText2); 
    String namePlayer2 = editText2.getText().toString(); 
    int scorePlayer2 = 0; 
    Player player2 = new Player(namePlayer2, scorePlayer2); 

    Intent intent = new Intent(this, ScoreScreen.class); 
    Bundle bundle = new Bundle(); 
    bundle.putParcelable("EXTRA_PLAYER_1", player1); 
    bundle.putParcelable("EXTRA_PLAYER_2", player2); 
    intent.putExtras(bundle); 
    startActivity(intent); 
} 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    ... 
    Player player1; 
    Player player2; 
    if (getIntent().getExtras() != null) { 
     player1 = getIntent().getExtras().getParcelable("EXTRA_PLAYER_1"); 
     player2 = getIntent().getExtras().getParcelable("EXTRA_PLAYER_2"); 
    } 
} 
관련 문제