单击按钮后应用程序崩溃

时间:2017-07-10 15:40:56

标签: java android

我创建了一个Android应用程序,可以节省两个团队的得分。两队都有按钮给他们1分,2分或3分。还有一个重置按钮,可以将两队的得分重置为0.看起来像这样。

当我点击重置(两队都有0分)时没有任何反应,但是当我点击一个应该为球队添加分数的按钮时,应用程序会崩溃。

首先,我定义了团队的分数(当然在全球范围内)。

int teamAScore = 0;
int teamBScore = 0;

然后我写了为分数添加分数的方法。例如,为A队增加3分。

private void addTeamA3(View view){
    teamAScore += 3;
    updateA(teamAScore);
}

updateA()方法会刷新A队的分数。

private void updateA(int score){
    TextView ascore = (TextView) findViewById(R.id.textView3);
    ascore.setText(score);
}

但正是在这里,应用程序崩溃了。当我尝试向团队添加积分时,它会崩溃。但是当我重置积分时(两个得分均为0)没有任何反应。

private void reset(View view){
    teamAScore = 0;
    teamBScore = 0;
    updateA(teamAScore);
    updateB(teamBScore);
}

问题可能是NullPointerException,我不确定,但我希望你可以帮助我。我还是Android编程的新手。

Java代码:

package com.example.android.justjava;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

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

int teamAScore = 0;
int teamBScore = 0;

private void addTeamA3(View view){
    teamAScore += 3;
    updateA(teamAScore);
}

private void addTeamA2(View view){
    teamAScore += 2;
    updateA(teamAScore);
}

private void addTeamAFreeThrow(View view){
    teamAScore++;
    updateA(teamAScore);
}

private void addTeamB3(View view){
    teamBScore += 3;
    updateB(teamAScore);
}

private void addTeamB2(View view){
    teamBScore += 2;
    updateB(teamBScore);
}

private void addTeamBFreeThrow(View view){
    teamBScore++;
    updateB(teamBScore);
}

private void reset(View view){
    teamAScore = 0;
    teamBScore = 0;
    updateA(teamAScore);
    updateB(teamBScore);
}


private void updateA(int score){
    TextView ascore = (TextView) findViewById(R.id.textView3);
    ascore.setText(score);
}

private void updateB(int score){
    TextView bscore = (TextView) findViewById(R.id.textView4);
    bscore.setText(score);
}
}

XML代码:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout 
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.android.justjava.MainActivity">

<TextView
    android:id="@+id/textView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginLeft="59dp"
    android:layout_marginTop="16dp"
    android:text="Team A"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintTop_toTopOf="parent" />

<TextView
    android:id="@+id/textView2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="16dp"
    android:text="Team B"
    app:layout_constraintTop_toTopOf="parent"
    android:layout_marginRight="59dp"
    app:layout_constraintRight_toRightOf="parent" />

<TextView
    android:id="@+id/textView3"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="0"
    android:textSize="60sp"
    android:layout_marginTop="16dp"
    app:layout_constraintTop_toBottomOf="@+id/textView"
    android:layout_marginLeft="65dp"
    app:layout_constraintLeft_toLeftOf="parent" />

<TextView
    android:id="@+id/textView4"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="0"
    android:textSize="60sp"
    android:layout_marginTop="16dp"
    app:layout_constraintTop_toBottomOf="@+id/textView2"
    android:layout_marginRight="65dp"
    app:layout_constraintRight_toRightOf="parent" />

<Button
    android:id="@+id/button4"
    android:layout_width="120dp"
    android:layout_height="wrap_content"
    android:text="+3 POINTS"
    android:layout_marginLeft="28dp"
    app:layout_constraintLeft_toLeftOf="parent"
    android:layout_marginTop="16dp"
    app:layout_constraintTop_toBottomOf="@+id/textView3"
    android:onClick="addTeamA3"/>

<Button
    android:id="@+id/button5"
    android:layout_width="120dp"
    android:layout_height="wrap_content"
    android:text="+2 POINTS"
    android:layout_marginTop="16dp"
    app:layout_constraintTop_toBottomOf="@+id/button4"
    android:layout_marginLeft="28dp"
    app:layout_constraintLeft_toLeftOf="parent"
    android:onClick="addTeamA2"/>

<Button
    android:id="@+id/button6"
    android:layout_width="120dp"
    android:layout_height="wrap_content"
    android:text="Free throw"
    android:layout_marginTop="16dp"
    app:layout_constraintTop_toBottomOf="@+id/button5"
    android:layout_marginLeft="28dp"
    app:layout_constraintLeft_toLeftOf="parent"
    android:onClick="addTeamAFreeThrow"/>

<Button
    android:id="@+id/button7"
    android:layout_width="120dp"
    android:layout_height="wrap_content"
    android:text="+3 POINTS"
    android:layout_marginRight="28dp"
    app:layout_constraintRight_toRightOf="parent"
    android:layout_marginTop="16dp"
    app:layout_constraintTop_toBottomOf="@+id/textView4"
    android:onClick="addTeamB3"/>

<Button
    android:id="@+id/button10"
    android:layout_width="120dp"
    android:layout_height="wrap_content"
    android:text="+2 POINTS"
    android:layout_marginTop="16dp"
    app:layout_constraintTop_toBottomOf="@+id/button7"
    android:layout_marginRight="28dp"
    app:layout_constraintRight_toRightOf="parent"
    android:onClick="addTeamB2"/>

<Button
    android:id="@+id/button11"
    android:layout_width="120dp"
    android:layout_height="wrap_content"
    android:text="Free throw"
    android:layout_marginRight="28dp"
    app:layout_constraintRight_toRightOf="parent"
    android:layout_marginTop="16dp"
    app:layout_constraintTop_toBottomOf="@+id/button10"
    android:onClick="addTeamBFreeThrow"/>

<Button
    android:id="@+id/button12"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Reset"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    app:layout_constraintBottom_toBottomOf="parent"
    android:layout_marginBottom="57dp" />

2 个答案:

答案 0 :(得分:1)

更改从私人到公共的方法访问

   public void addTeamA3(View view){
        teamAScore += 3;
        updateA(teamAScore);
    }

    public void addTeamA2(View view){
        teamAScore += 2;
        updateA(teamAScore);
    }

    public void addTeamAFreeThrow(View view){
        teamAScore++;
        updateA(teamAScore);
    }

    public void addTeamB3(View view){
        teamBScore += 3;
        updateB(teamBScore);// teamBScore
    }

    public void addTeamB2(View view){
        teamBScore += 2;
        updateB(teamBScore);
    }

    public void addTeamBFreeThrow(View view){
        teamBScore++;
        updateB(teamBScore);
    }

    public void reset(View view){
        teamAScore = 0;
        teamBScore = 0;
        updateA(teamAScore);
        updateB(teamBScore);
    }

正如其他人提到的那样,将得分的整数值更改为字符串

A队

ascore.setText(Integer.toString(score));

B队

bscore.setText(Integer.toString(score));

并且您忘记从xml调用reset方法,将以下内容添加到重置按钮

 android:onClick="reset"

答案 1 :(得分:0)

问题是,ascore.setText(score)将整数传递给setText方法。 setText(int)方法查找具有给定id的资源。您需要将您的点解析为String。请尝试使用ascore.setText(Integer.toString(score))