Android:将int值从一个活动传递到另一个活动

时间:2014-09-29 20:44:42

标签: java android int

我正在努力弄清楚为什么我不能将int值从一个活动传递到另一个活动。该应用程序将要求您按一个按钮从1-100生成一个随机数,该数字将显示在按钮下方。还有另一个按钮,它将打开一个新活动,只显示已滚动的随机数...但我只是得到0。

我调查了类似的问题,但没有用。

这是我的MainActivity代码

public class MainActivity extends ActionBarActivity {

    int n;

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

    public void ButtonRoll(View view) {

        TextView textRoll = (TextView) findViewById(R.id.textview_roll);
        Random rand = new Random();
        n = rand.nextInt(100) + 1;
        String roll = String.valueOf(n);
        textRoll.setText("Random number is " + roll);

    }

    public void OpenStats(View view) {
        Intent getStats = new Intent(this, Stats.class);
        startActivity(getStats);
    }

    public int GetNumber (){ return  n; }
}

继承我的第二堂课。

public class Stats extends Activity {

    MainActivity statistics = new MainActivity();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.stats);
        int n = statistics.GetNumber();
        TextView tvStats = (TextView) findViewById(R.id.passedNumber_textview);
        String number = String.valueOf(n);
        tvStats.setText(number);
    }

}

在使用活动时,是否使用getter以错误的方式从另一个类获取数据?谢谢你的时间。

1 个答案:

答案 0 :(得分:3)

您应该将数据作为额外附加到您的意图中传递。为此,您需要首先确定要使用的全局密钥。您可以在MainActivity中执行类似的操作

public static final String SOME_KEY = "some_key";

然后将您的OpenStats方法修改为

public void OpenStats(View view) {
    Intent getStats = new Intent(this, Stats.class);
    getStats.putExtra(SOME_KEY, n);
    startActivity(getStats);
}

然后在Stats.class onCreate方法

public void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.stats);

    int n = getIntent().getIntExtra(MainActivity.SOME_KEY, -1);
    TextView tvStats = (TextView) findViewById(R.id.passedNumber_textview);
    String number = String.valueOf(n);
    tvStats.setText(number);
}

你显然应该确保你至少调用一次ButtonRoll,或者你设置了n,这样你就不会传递null int。

另外,作为注释,约定规定方法应使用较低的驼峰大小写格式。也就是说,第一个单词是完全小写的,后续单词的第一个单词是大写。这会改变你的方法

OpenStats() -> openStats()
ButtonRoll() -> buttonRoll()

类/对象是上层驼峰案例,只是为了避免混淆。