【问题标题】:How do I access a variable from a second class in Java?如何从 Java 中的第二个类访问变量?
【发布时间】:2017-11-16 01:52:16
【问题描述】:

我正在尝试根据玩家数量生成一定数量的按钮。但是,每当我尝试将玩家数量从一个班级转移到另一个班级时,应用程序就会崩溃。

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

上面是主要活动。我正在尝试访问以下类中的对象 player 和 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] 引用它们,但这只会导致应用程序崩溃。有什么建议吗?

提前感谢您的帮助。如果您有任何问题,请告诉我。

【问题讨论】:

    标签: java android variables object static


    【解决方案1】:

    这很容易..更改 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..
    }
    }
    

    【讨论】:

    • 我尝试了您的解决方案,但当我转到第二个活动时它仍然崩溃。有什么想法吗?
    • 它崩溃是因为类 Player 没有实现 android.io.Parcelable。
    • 我建议你只传递 String array ,因为你只是在 MainActivity 中收集玩家的名字。我将为此编辑我的答案。
    • 我实现了 Parcelable,但它仍然崩溃。此外,我需要使用 Player 数组而不是 String 数组,因为我将添加到 Player 类中的其他信息。我只是不想在这个问题得到解决之前解决这个问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-25
    • 1970-01-01
    • 1970-01-01
    • 2020-06-28
    • 1970-01-01
    相关资源
    最近更新 更多