【问题标题】:Putting double value into TextView将双值放入 TextView
【发布时间】:2014-07-01 17:12:50
【问题描述】:

在我的 Android 应用程序中,我正在使用 EditTexts 中输入的值计算双精度值,并尝试将答案放入 TextView。我的代码是这样的:

double scoreDouble;
TextView score;
EditText gpa;
EditText sat;
EditText act;
Button calc;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    gpa = (EditText) findViewById(R.id.gpa);
    String gpaString = gpa.getText().toString();
    if(gpaString.equals("")){
        gpaString = "0";
    }
    final double gpaDouble = Double.parseDouble(gpaString);     
    sat = (EditText) findViewById(R.id.sat);
    String satString = sat.getText().toString();
    if(satString.equals("")){
        satString = "0";
    }
    final int satInt = Integer.parseInt(satString);     
    act = (EditText) findViewById(R.id.act);
    String actString = act.getText().toString();
    if(actString.equals("")){
        actString = "0";
    }
    final int actInt = Integer.parseInt(actString);     
    score = (TextView) findViewById(R.id.score);            
    calc = (Button) findViewById(R.id.calc);
    calc.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            if(actInt/36>satInt/2400){
                scoreDouble= (0.6*gpaDouble*25)+(0.4*(actInt/36)*100);
                String scoreString = Double.toString(scoreDouble);
                score.setText("Your score is "+scoreString);
            }else{
                scoreDouble = (0.6*gpaDouble*25)+(0.4*(satInt/2400)*100);
                String scoreString = Double.toString(scoreDouble);
                score.setText("Your score is "+scoreString);
            }


        }
    });
}

到目前为止,当按下按钮时,TextView 会显示:“你的分数是 0.0。”我觉得这与我将 EditTexts 的默认值设置为 0 的事实有关。在我这样做之前,我收到一个错误,指出 NumberFormatException:无效双精度:“”。如果这是问题,我应该如何解决它。如果这不是问题,那是什么问题?

【问题讨论】:

  • 您的问题到底是什么?它显示 0.0 而不是 0 的事实?
  • 尝试使用 String.valueOf() 而不是 Double.toString()
  • 问题是它不应该显示 0.0。无论我在编辑文本中输入什么,它都会这样做。也将其更改为 String.valueOf 并没有解决问题。

标签: android parsing textview double numberformatexception


【解决方案1】:

您将 actInt 和 satInt 定义为 final 变量,它们只会被赋值一次(在执行 onCreate 方法时),并且初始值将为零,因为在开始时 edittext 不包含任何内容。

解决这个问题:

将他的actInt 和satInt 从局部变量移动到一个字段变量并删除final 关键字。 (我的意思是将这些变量定义为类中的私有变量)并为 onclick 方法中的变量赋值。

public class test extends Activity {

double scoreDouble;
TextView score;
EditText gpa;
EditText sat;
EditText act;
Button calc;

private int satInt;
private int actInt;

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

    gpa = (EditText) findViewById(R.id.gpa);

    sat = (EditText) findViewById(R.id.sat);

    act = (EditText) findViewById(R.id.act);

    score = (TextView) findViewById(R.id.score);
    calc = (Button) findViewById(R.id.calc);
    calc.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            String gpaString = gpa.getText().toString();
            if (gpaString.equals("")) {
                gpaString = "0";
            }
            double gpaDouble = Double.parseDouble(gpaString);

            String satString = sat.getText().toString();
            if (satString.equals("")) {
                satString = "0";
            }
            int satInt = Integer.parseInt(satString);

            String actString = act.getText().toString();
            if (actString.equals("")) {
                actString = "0";
            }
            int actInt = Integer.parseInt(actString);
            if (actInt / 36 > satInt / 2400) {
                scoreDouble = (0.6 * gpaDouble * 25)
                        + (0.4 * (actInt / 36) * 100);
                String scoreString = Double.toString(scoreDouble);
                score.setText("Your score is " + scoreString);
            } else {
                scoreDouble = (0.6 * gpaDouble * 25)
                        + (0.4 * (satInt / 2400) * 100);
                String scoreString = Double.toString(scoreDouble);
                score.setText("Your score is " + scoreString);
            }

        }
    });
}
}

【讨论】:

  • 是的,这成功了。非常感谢你。尊重。
【解决方案2】:

您正在使用 onCreate 方法做所有事情。因此,您的所有代码都会在您的应用程序开始时被调用。此时,您的EditTexts 为空,您的代码转到以下部分:

 if(gpaString.equals("")){
        gpaString = "0";
 }

 if(actString.equals("")){
        actString = "0";
 }

 if (actString.equals("")) {
        actString = "0";
 }

这意味着您的值 gpaDoubleactIntsatInt 等于 0。

然后,您正在执行以下操作:

scoreDouble = (0.6*gpaDouble*25)+(0.4*(satInt/36)*100);

还有这个:

scoreDouble = (0.6*gpaDouble*25)+(0.4*(satInt/2400)*100);

使用 0 值,您的 scoreDouble 值只能等于 0。

要修复它,请在 ButtononClick 方法中获取 EditTexts 的文本。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多