当前位置: 首页 > 知识库问答 >
问题:

分析onTick方法中的字符串是否会使我的应用程序崩溃?

白星海
2023-03-14

我有一个很短的倒计时(最少3秒,最多10秒),用来控制屏幕上显示新的数学问题。每隔1秒,倒计时应该检查用户是否在编辑文本中输入了正确答案。以下是我的代码:

private void startQuestionTimer()
    {
        long startTime = DataHolder.getQuestionTime()*1000;
        questionTimer = new CountDownTimer(startTime, 1000) {

            @Override
            public void onTick(long millisUntilFinished) {
                //continually check user's input into the EditText
                //if input is ever equal to actualIntAnswer, reset the timer and EditText
                //then display another math problem
                int givenAnswer = Integer.parseInt(userAnswer.getText().toString());
                if (givenAnswer == actualIntAnswer)
                {
                    questionTimer.cancel();
                    userAnswer.getText().clear();
                    displayNewMathProblem();
                    questionTimer.start();
                }
            }

            @Override
            public void onFinish() {
                displayNewMathProblem();
                if (!testTimeExpired)
                {
                    questionTimer.start();
                }
                else
                {
                    questionTimer.cancel();
                }
            }
        }.start();
    }

我遇到的问题是,这个倒计时程序一创建,应用程序就会崩溃。出于某种原因,int givenaswer=Integer。parseInt(userAnswer.getText()。toString())似乎使应用程序崩溃,我认为这是因为倒计时无法在1秒内完成所有这些。我尝试将其拆分为两种方法,如下所示:

private int givenAnswer;
private String givenAnswerToString()
    {
        return userAnswer.getText().toString();
    }

    private void givenAnswerToInt()
    {
        givenAnswer = Integer.parseInt(givenAnswerToString());
    }

然后像这样调用onTick()中的givenAnswerToInt():

@Override
            public void onTick(long millisUntilFinished) {
                givenAnswerToInt();
                if (givenAnswer == actualIntAnswer)
                {
                    questionTimer.cancel();
                    userAnswer.getText().clear();
                    displayNewMathProblem();
                    questionTimer.start();
                }

            }

这到底是怎么回事?这是一个像我认为的那样试图在短时间内做太多事情的问题,还是完全是另一回事?我能做些什么来解决这个问题?

共有1个答案

石正卿
2023-03-14

我nteger.parseInt可以抛出一个NumberFormatExc0019,如果没有捕获,这将导致应用程序突然停止。
当您作为parseInt的参数传递的String没有
这种情况在代码中几乎是瞬间发生的,这是因为EditText.getText()只是返回",因为用户没有键入任何代码
你所能做的就是用一个try-cat语句管理异常

try {
    int givenAnswer = Integer.parseInt(userAnswer.getText().toString());
} catch (NumberFormatException e) {
    // return or do something else to deal with the problem
}

if(givenAnswer == actualIntAnswer){
    ...
}
...
 类似资料:
  • 我开始学习android,我的第一个练习是计算器。在做适当的计算器之前,我计划创建一个非常基本的应用程序,用户只需通过EditText输入2个数字,用按钮选择算术运算,并在按下“igual”按钮时在TextView中获得结果。 我的想法是声明2个字符串(sinput1 在我开始编写操作的工作方式之前,所有布局看起来都运行良好,但是每次我运行应用程序(使用手机或模拟器)时,当我按EditText输入

  • 我正在使用SharedPref在活动之间传递字符串。我正试图使我的代码更有效,但我有一个我无法解决的问题。 MainActivity.Class中的我的代码: @override protected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(r.layout.

  • 这就是它崩溃的地方 01-12 13:44:12.571 296 26-29688/ca.dti.grounded.app E/OtherService:AsynchChecker 287:73 java.lang.IllegalStateException:Parcel已完成!在android.os.binderproxy.transactNative(本机方法)在android.os.bind

  • 如果设备Google Play services版本没有更新,在我的应用程序上使用以下代码会导致应用程序崩溃。 它在Android OS版本4.2.2和Google Play Services版本3.1.58的设备上崩溃(为了处理Google Play Services可用性检查,我特意降低了它的等级)。

  • 注意:在我添加广告之前,我的应用程序运行良好,使用相同的方法 当我试图将adview添加到我的应用程序时,它会使我的应用程序崩溃,所以我删除了它,但仍然给我这个这是logcat 10-12 21:33:19.765 4993-4993/com。fm360。almorfis E/AndroidRuntime:致命异常:主进程:com。fm360。阿尔莫菲斯,PID:4993爪哇。lang.Runti

  • 我正试图在Android Studio中制作一个可以“记住”我的成绩和科目的应用程序。目前,我正在开发一个允许我制作主题的系统。 编译后,没有错误,我打开应用程序,应用程序崩溃,我收到一个错误:“尝试在空对象引用上调用虚拟方法” 我认为字符串数组与此有关。 这是我的代码: 提前谢谢!