0

I'm struggling to figure out why I can't pass an int value from one activity to another. The app will ask you to press a button to generate a random number from 1-100 which will be displayed below the button. There is also another button which will open a new activity simply showing the random number that was rolled... but I just get 0.

I've looked into similar questions asked but to no avail.

Here's my code from 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; }
}

Heres my 2nd class.

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

}

Is using getters the wrong way to get data from another class when using activities? Thanks for your time.

JohnJ73
  • 1
  • 3

1 Answers1

3

You should pass your data as an extra attached to your intent. To do this you need to first determine a global key to be used. You could do something like this in your MainActivity

public static final String SOME_KEY = "some_key";

then modify your OpenStats method to

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

and then in Stats.class onCreate method

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

You obviously should make sure that you are calling ButtonRoll at least once or that you set n so that you aren't passing a null int.

Also, as note, convention states that methods should use lower camel case formatting. That is, the first word is completely lower case and the first letter of subsequent words is upper case. That would change your methods

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

Classes/objects are upper camel case, just to help avoid confusion.

zgc7009
  • 3,371
  • 5
  • 22
  • 34
  • Top guidance! Worked perfectly. Also, sorry for the convention errors.. so many conventions to remember (xml strings, id's, classes, methods etc) I should have known better. Thanks again. – JohnJ73 Sep 30 '14 at 17:54
  • @JohnJ73 No need to apologize, there are definitely a lot of guidelines as far as formatting goes. It will come with time. Glad I could help :) – zgc7009 Sep 30 '14 at 18:18