Dmitry
Dmitry

Reputation: 85

Android: random and textView

I have just started learning Android and got some misunderstanding. I'm trying to create an application which displays a textView and a button. Every button click generates a new random number which should be displayed in the textView.

But unfortunately my code causes a list of errors. Here it is:

public class FirstAndroidProjectActivity extends Activity {

public OnClickListener listener = new View.OnClickListener() {

    @Override
    public void onClick(View v) {
        TextView tv = (TextView) findViewById(R.id.display);
        Random r = new Random();
        int i = r.nextInt(101);
         tv.setText(i);

    }
};

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
   Button button = (Button) findViewById(R.id.button);
   button.setOnClickListener(listener);    
    }
}

If I just don't use random and use some string except of i (for example tv.setText("99");) everything is ok, but it doesn't work with a variable as a parameter of setText().

Where is a mistake?

Hope for your help.

Upvotes: 0

Views: 2322

Answers (6)

th30perator
th30perator

Reputation: 66

use

tv.setText(new Integer(i).toString()) ;

Upvotes: 0

Dalmas
Dalmas

Reputation: 26547

Convert your integer to a String before setting it to the textView. You should also move Random r = new Random(); outside of the method, or else your numbers may not really be random :

Random r = new Random();

@Override
public void onClick(View v) {
    TextView tv = (TextView) findViewById(R.id.display);
    int i = r.nextInt(101);
    tv.setText(Integer.toString(i));
}

From the documentation :

If two instances of Random are created with the same seed, and the same sequence of method calls is made for each, they will generate and return identical sequences of numbers

If you create two Random objects too quickly (for example the user clicks two times on the button very quickly), they will share the same seed (the system clock is used to generate it) and as a result you will get the same number two times.

By creating only one Random instance in a global variable, you avoid this issue.

Upvotes: 0

Yevgeny Simkin
Yevgeny Simkin

Reputation: 28349

Java doesn't auto convert types. The + operator is overloaded to transform the parameters passed to it into a String when one or more of those paramaters is a String. So, when you pass i + "" to setText() you are passing a String, however if you just pass i then the compiler sees you passing an int to a method that expects a String and lets you know that that can't be done.

Upvotes: 1

RedChris
RedChris

Reputation: 523

i is an int, try tv.setText("" + i);

Upvotes: 0

Caner
Caner

Reputation: 59168

Try:

tv.setText(String.valueOf(i));

Upvotes: 2

dymmeh
dymmeh

Reputation: 22306

You need to convert your random number to a string before setting the text on your TextView

Try

tv.setText(i +"");

Upvotes: 5

Related Questions