2017-06-14 65 views
-1

我试图根据玩家的数量生成一定数量的按钮。但是,每当我尝试将玩家人数从一个类别移动到另一个类别时,该应用就会崩溃。如何从Java中的第二个类访问变量?

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); 
      } 
     } 
    }); 
} 
} 

,并访问您的数据在第二个活动如下..

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

我想你的解决方案,但它仍然崩溃时,我转向第二项活动。有任何想法吗? –

+0

它因为类Player没有实现android.io.Parcelable而崩溃。 –

+0

,我建议你只传递String数组,因为你只是在MainActivity中收集玩家的名字。我会编辑我的答案。 –