【问题标题】:Android- Error MessageAndroid - 错误信息
【发布时间】:2018-07-18 10:03:08
【问题描述】:

我最近在将我的 android 代码编译到模拟器上时遇到了错误。游戏是,当您单击一个按钮时,它会给您一个显示在 textView 上的数学问题,并且用户输入他们的答案(以数字形式)并单击按钮“检查”当我单击该按钮时,它总是返回 false。 有谁知道如何解决这个问题?

Java 类

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_game);




    mathQuestion = findViewById(R.id.magic_textview);

    redCircle = findViewById(R.id.math_ball);

    yellowbox = findViewById(R.id.yellow_box);
    yellowboxY = 1550f - 130f;
    yellowbox.setY(yellowboxY);
    yellowboxX = 472f;
    yellowbox.setX(yellowboxX);


    type_answer = findViewById(R.id.type_answer);
    Button checkButton = findViewById(R.id.check_button);
    checkButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if(redCircleX == yellowboxX && redCircleY == yellowboxY){
                mathQuestion.setText("What is "+math_int1+" + "+math_int2+" ?");
                math_int1 = r.nextInt(20);
                math_int2 = r.nextInt(20)+1;
                string_math_int1 = String.valueOf(math_int1);
                string_math_int2 = String.valueOf(math_int2);
                Button checkAnswer = findViewById(R.id.check_answer);
                 checkAnswer.setOnClickListener(new View.OnClickListener() {
                     @Override
                     public void onClick(View view) {

                        //Error? Always returning false?

                         if (type_answer.getText().toString().contains (Integer.toString( math_int1 + math_int2))) {
                            Toast t =  Toast.makeText(GameActivity.this, "Success!", Toast.LENGTH_SHORT);
                            t.show();
                         } else {
                            Toast t2= Toast.makeText(GameActivity.this, type_answer.getText().toString(), Toast.LENGTH_SHORT);
                            t2.show();

                         }



                       }


                 });

            }else{
                Toast.makeText(GameActivity.this, "Incorrect Or Error", Toast.LENGTH_SHORT).show();
            }
        }

    });



    Button upButton = findViewById(R.id.up_button);
    upButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            moveUp();

        }
    });
    Button downButton = findViewById(R.id.down_button);
    downButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            moveDown();

        }
    });


    Button leftButton = findViewById(R.id.left_button);
    leftButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            moveLeft();

        }
    });
    Button rightButton = findViewById(R.id.right_button);
    rightButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            moveRight();

        }
    });
    Button resetCircleXY = findViewById(R.id.reset_button);
    resetCircleXY.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            initCircleXY();
            Toast.makeText(GameActivity.this, "Reset Ball's Position", Toast.LENGTH_SHORT).show();

        }
    });
    upButton.performClick();
    leftButton.performClick();
    redCircleY = 1550f;
    redCircle.setY(redCircleY);
    redCircleX = 472f;
    redCircle.setX(redCircleX);


}

private void moveUp(){
    redCircleY -= ballMoveDis;
    redCircle.setY(redCircleY);

}
private void moveDown(){
    redCircleY += ballMoveDis;
    redCircle.setY(redCircleY);

}

private void moveLeft(){
    redCircleX += ballMoveDis;
    redCircle.setX(redCircleX);

}
private void moveRight(){
    redCircleX -= ballMoveDis;
    redCircle.setX(redCircleX);

}
private void initCircleXY(){
    redCircleY = 1550f;
    redCircle.setY(redCircleY);
    redCircleX = 472f;
    redCircle.setX(redCircleX);
}

}

非常感谢您的帮助,谢谢

【问题讨论】:

    标签: java android string android-studio android-edittext


    【解决方案1】:

    第一个错误

    string_math_int1 = String.valueOf(math_int1);
    string_math_int2 = String.valueOf(math_int1);  // this should be math_int2
    

    但考虑添加两个字符串

     string_math_int1 + string_math_int2)
    
     "10"             +  "20"
    

    等于

     "1020" not "30"
    

    也许

    if (type_answer.getText().toString().equals(String.valueOf (math_int1 + math_int2) {
    

    【讨论】:

    • 谢谢,但我的应用仍然因为同样的原因崩溃
    • 你还没有告诉我们这是什么原因,把你日志的相关部分贴出来
    • 贴出你日志的相关部分,不知道你是不是在处理NPE
    • 什么意思,错误信息?在 logcat 上?
    • 嗯,我发现这个答案现在与您经过大量编辑的问题不再相关。在实施我的修复后,您基本上已经将这个问题更改为一个新问题 - 而不是它的工作方式 - 再见
    【解决方案2】:

    回答新格式化的问题:

    当您想要检查它们的 int 值时,您的问题与比较两个字符串有关。您可以尝试在EditText 的条目上使用Integer.parseInt()。请注意,如果您的 EditText 包含任何非数字字符,您将需要对其进行尝试以捕获异常。

    回答之前关于编辑前崩溃的问题:

    您的崩溃与您的EditText 无关。就是这一行:

    Toast.makeText(GameActivity.this,math_int1 + math_int2 , Toast.LENGTH_SHORT).show();

    通过传递一个 int 值,它试图查找具有该 id 的字符串。如果您的意图是显示这些整数的总和,它应该类似于:

    Toast.makeText(GameActivity.this, String.valueOf(math_int1 + math_int2), Toast.LENGTH_SHORT).show();

    【讨论】:

    • 谢谢你,它只是现在,它总是返回false
    • 您的问题与您比较字符串的方式有关。您可以尝试在EditText 的条目上使用Integer.parseInt()。请注意,如果您的EditText 包含任何非数字字符,您将需要对其进行尝试以捕获异常。
    • 谢谢,它解决了我的问题。
    • 请注意。大量编辑您的问题通常不是一个好习惯,尤其是当它收到解决您最初问题的答案时。
    • 感谢您的建议。我会在编辑我的帖子时更加注意
    猜你喜欢
    • 2015-02-19
    • 1970-01-01
    • 1970-01-01
    • 2015-12-10
    • 2016-07-03
    • 2016-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多