Search code examples
javaandroidintegerimageviewparseint

Convert ImageView to Integer: Android Studio


I'm trying to take the target (initiated as ImageView) id and put the integer id into a switch case to look at the adjacent Views and compare their drawables to determine if that player wins or if the game continues. I have the buttonPressed variable initiated as an Integer and used the parseInt() to get the int value of target.

public void compareButton(int buttonPressed){
    //int count = 0;
    ImageView adjacent;
    ImageView adjacentB;

    switch (buttonPressed){
        case R.id.imageButtonA: //this is where adjacent buttons are identified and compared
            adjacent = findViewById(R.id.imageButtonB);
            adjacentB = findViewById(R.id.imageButtonC);
            if (target.getDrawable() == adjacent.getDrawable() && target.getDrawable() == adjacentB.getDrawable()) {

                Toast.makeText(MainActivity.this, "You Win!", Toast.LENGTH_SHORT).show(); //Win condition


           // } else if (target.getDrawable() == R.id.imageButtonE.getDrawable() & target.getDrawable() == R.id.imageButtonI.getDrawable()) {

                //Toast.makeText(MainActivity.this, "You Win!", Toast.LENGTH_SHORT).show(); //Win condition

           // } else if (target.getDrawable() == R.id.imageButtonD.getDrawable() & target.getDrawable() == R.id.imageButtonG.getDrawable()) {

                //Toast.makeText(MainActivity.this, "You Win!", Toast.LENGTH_SHORT).show(); //Win condition

            }
            break;
        case R.id.imageButtonB:

            break;

I am not filling every case for debugging purposes.

The issue I am having is when I run the emulator I get an error that says

Caused by: java.lang.NumberFormatException: For input string: "androidx.appcompat.widget.AppCompatImageButton{517eade VFED..C.. ...P..ID 45,381-304,628 #7f070072 app:id/imageButtonA}"
    at java.lang.Integer.parseInt(Integer.java:521)
    at java.lang.Integer.parseInt(Integer.java:556)
    at com.example.connect3.MainActivity.switchColor(MainActivity.java:75)

Here is the code for the OnClickListener:

public void switchColor(View view) {

    //Button pressed, depending on user, switch's to that users color; identify adjacent button ID's; toast player control switch
    if (player == 1) {

        source = findViewById(R.id.yellow);
        target = findViewById(view.getId());
        target.setImageDrawable(source.getDrawable());
        buttonPressed = Integer.parseInt(target.toString());
        compareButton(buttonPressed);
        player++;
        Toast.makeText(MainActivity.this, "Player 2's Turn!", Toast.LENGTH_SHORT).show();

    } else {

        source = findViewById(R.id.red);
        target = findViewById(view.getId());
        target.setImageDrawable(source.getDrawable());
        buttonPressed = Integer.parseInt(String.valueOf(target));
        compareButton(buttonPressed);
        player--;
        Toast.makeText(MainActivity.this, "Player 1's Turn!", Toast.LENGTH_SHORT).show();

    }

Not entirely sure what is going on at this point because I thought I did everything correct but clearly something was missed. Any help would be appreciated.


Solution

  • change :

    buttonPressed = Integer.parseInt(String.valueOf(target));
    

    To :

    buttonPressed = target.getId();

    Explanation : your error says NumberFormatException means you are trying to get int value from String which is not possible to Parse or in simple your string doesn't contain proper int value and also you are passing (androidx.appcompat.widget...) as string while you have to pass button I'd