2017-06-14 11 views
-1

私は、プレーヤーの数に応じて特定の数のボタンを生成しようとしています。しかし、私があるクラスから別のクラスにプレイヤーの数を移動しようとするたびに、アプリケーションがクラッシュします。Javaで2番目のクラスの変数にアクセスするにはどうすればよいですか?

public class MainActivity extends AppCompatActivity { 
    private EditText[] playersEditText = new EditText[10]; 

    public static Player[] players = new Player[10]; 
    public static int playerCount = 0; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 

     playersEditText[0] = (EditText) findViewById(R.id.player0); 
     playersEditText[1] = (EditText) findViewById(R.id.player1); 
     playersEditText[2] = (EditText) findViewById(R.id.player2); 
     playersEditText[3] = (EditText) findViewById(R.id.player3); 
     playersEditText[4] = (EditText) findViewById(R.id.player4); 
     playersEditText[5] = (EditText) findViewById(R.id.player5); 
     playersEditText[6] = (EditText) findViewById(R.id.player6); 
     playersEditText[7] = (EditText) findViewById(R.id.player7); 
     playersEditText[8] = (EditText) findViewById(R.id.player8); 
     playersEditText[9] = (EditText) findViewById(R.id.player9); 

     FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
     fab.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       playerCount = 0; 

       for (int i = 0; i < 10; i++) { 
        String name = playersEditText[i].getText().toString(); 

        if (!(name.equals(""))) { 
         playerCount++; 
         players[playerCount] = new Player(name); 
        } 
       } 

       if (playerCount < 5) 
        Toast.makeText(MainActivity.this, "You need at least 5 players " + playerCount, Toast.LENGTH_SHORT).show(); 
       else { 
        startActivity(new Intent(MainActivity.this, PlayerRevealment.class)); 
       } 
      } 
     }); 
    } 
} 

上記はメインアクティビティです。次のクラスのオブジェクトプレーヤーとint playerCountにアクセスしようとしています。

public class PlayerRevealment extends AppCompatActivity { 
    private int count = MainActivity.playerCount; 
    private Button[] playerButtons = new Button[count]; 
    //private LinearLayout playerRevealmentLayout; 
    //private LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT); 

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

     /*playerRevealmentLayout = (LinearLayout) findViewById(R.id.playerRevealmentLayout); 

     for (int i = 0; i < playerButtons.length; i++) { 
      playerButtons[i] = new Button(this); 
      playerButtons[i].setText("Player " + i); //Change to actual names 
      playerRevealmentLayout.addView(playerButtons[i], lp); 
     }*/ 
     Toast.makeText(PlayerRevealment.this, MainActivity.players.length, Toast.LENGTH_SHORT).show(); 

私は彼らが公共の静的な作り試してみましたが、私はMainActivity.playerCountとMainActivity.players [I]でそれらを参照するが、これは単にクラッシュアプ​​リになりました。助言がありますか?

ご協力いただきありがとうございます。ご質問がある場合はお知らせください。

答えて

0

それは非常にeasy..Change MainActivity ...

public class MainActivity extends AppCompatActivity { 
private EditText[] playersEditText = new EditText[10]; 

// Use String array to store Player's names. 
private String[] players=new String[10]; 
private int playerCount = 0; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 

    playersEditText[0] = (EditText) findViewById(R.id.player0); 
    playersEditText[1] = (EditText) findViewById(R.id.player1); 
    playersEditText[2] = (EditText) findViewById(R.id.player2); 
    playersEditText[3] = (EditText) findViewById(R.id.player3); 
    playersEditText[4] = (EditText) findViewById(R.id.player4); 
    playersEditText[5] = (EditText) findViewById(R.id.player5); 
    playersEditText[6] = (EditText) findViewById(R.id.player6); 
    playersEditText[7] = (EditText) findViewById(R.id.player7); 
    playersEditText[8] = (EditText) findViewById(R.id.player8); 
    playersEditText[9] = (EditText) findViewById(R.id.player9); 

    FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
    fab.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      playerCount = 0; 

      for (int i = 0; i < 10; i++) { 
       String name = playersEditText[i].getText().toString(); 

       if (!(name.equals(""))) { 
        playerCount++; 
        players[playerCount] = name; 
       } 
      } 

      if (playerCount < 5) 
       Toast.makeText(MainActivity.this, "You need at least 5 players " + playerCount, Toast.LENGTH_SHORT).show(); 
      else { 
       Intent intent=new Intent(this,PlayerRevealment.class); 
       intent.putExtra("yourCountKey",playerCount); 
       intent.putExtra("yourArrayKey",players); 
       startActivity(intent); 
      } 
     } 
    }); 
} 
} 

と、以下のように、第2の活動で自分のデータにアクセス..です

public class PlayerRevealment extends AppCompatActivity { 

//Use playerArray here. 
private Player[] players = new Player[10]; 

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

    Intent intent = getIntent(); 
    int playerCount = intent.getIntExtra("yourCountKey", 5); 
    String[] playerNames = intent.getStringArrayExtra("yourArrayKey"); 
    // Now create your players array. 
    for (int i = 0; i < playerNames.length; i++) { 
     players[i] = new Player(playerNames[i]); 
    } 
     //Do your stuff.. 
} 
} 
+0

私はあなたのソリューションを試してみましたが、ときに私、それはまだクラッシュ2番目のアクティビティに移動します。何か案は? –

+0

Playerクラスがandroid.io.Parcelableを実装していないためクラッシュします。 –

+0

と私はMainActivityでプレイヤーの名前を収集しているだけなので、あなたはString配列を渡すことをお勧めします。私は私の答えを編集します。 –

関連する問題