Home > Software engineering >  Why does my app, written in Kotlin, stop when I press the 'balls' button?
Why does my app, written in Kotlin, stop when I press the 'balls' button?

Time:02-20

My app has 2 screens and works correctly in development so far. It already has 2 buttons ('toss' and 'startGame'which work correctly. Now I have added a further button called 'balls', designed to change the background colours of 4 TextViews ('ball1' to 'ball4'). However, pressing it once does nothing, and pressing it again causes the app to stop, with the displayed message "GC Clicker has stopped" or "GC Clicker keeps stopping". Here is the first section of my MainActivity.kt:

        package com.example.golfclicker

import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.widget.EditText
import android.widget.TextView
import android.graphics.Color
import android.widget.Button
import android.content.Intent
import android.media.AudioManager
import android.media.SoundPool

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val soundPool:SoundPool?

        // Link variables to xml views
        val player1Name = findViewById<EditText>(R.id.PersonName1)
        val handicap1 = findViewById<EditText>(R.id.hpInput1)
        val player2Name = findViewById<EditText>(R.id.PersonName2)
        val handicap2 = findViewById<EditText>(R.id.hpInput2)
        val startGame = findViewById<Button>(R.id.startGame)
        val toss = findViewById<Button>(R.id.toss)
        val bkgnd1 = findViewById<TextView>(R.id.Background1)
        val bkgnd1a = findViewById<TextView>(R.id.Background1a)
        val bkgnd1b = findViewById<TextView>(R.id.Background1b)
        val bkgnd2 = findViewById<TextView>(R.id.Background2)
        val bkgnd2a = findViewById<TextView>(R.id.Background2a)
        val bkgnd2b = findViewById<TextView>(R.id.Background2b)
        val balls = findViewById<Button>(R.id.balls)
        val ball1 = findViewById<TextView>(R.id.ball1)
        val ball2 = findViewById<TextView>(R.id.ball2)
        val ball3 = findViewById<TextView>(R.id.ball3)
        val ball4 = findViewById<TextView>(R.id.ball4)

        var priSec = true   // True:Primaries  False:Secondaries

        var tossedP1 = ""      //String values to pass to Intent
        var tossedHp1 =""
        var tossedP2 = ""
        var tossedHp2 =""

        var tossed = false  //has Toss button been used?

        //Set up soundpool and load the sound file
        soundPool = SoundPool(2,AudioManager.STREAM_MUSIC,0)
        val sound1 = soundPool.load(baseContext,R.raw.computer_keyboard,1)
        val sound2 = soundPool.load(baseContext,R.raw.coins,1)

        //Handle balls button click
        balls.setOnClickListener {
            if(priSec==true) {
                    with(ball1) { setBackgroundColor(Color.parseColor("button_blue")) }
                    with(ball2) { setBackgroundColor(Color.parseColor("red")) }
                    with(ball3) { setBackgroundColor(Color.parseColor("black")) }
                    with(ball4) { setBackgroundColor(Color.parseColor("yellow")) }
            } else {
                 with(ball1) { setBackgroundColor(Color.parseColor("green")) }
                  with(ball2) {setBackgroundColor(Color.parseColor("pink")) }
                  with(ball3) {setBackgroundColor(Color.parseColor("brown")) }
                  with(ball4) {setBackgroundColor(Color.parseColor("white")) }
            }
            priSec = !priSec  //toggle primary/secondary
        }

        //Handle 'Toss' button click
    toss.setOnClickListener {
        var ran = (0..1).random()  //Toss coin
//        val ran = 1         //checking name-swapping

Any suggestions would be welcome.

CodePudding user response:

Color.parseColor(...) works in different way than you think. You can parse color like this:

Color.parseColor("#ff77bb")

In other words, you must pass hex code of color

CodePudding user response:

this line is wrong .. because you didn't define the color

 setBackgroundColor(Color.parseColor("button_blue") 
        

try

  setBackgroundColor(Color.parseColor("#39b8db") 
        

or

  context.getResources().getColor(android.R.color.white)
  • Related