Android 将双值放入TextView

Android 将双值放入TextView,android,parsing,textview,double,numberformatexception,Android,Parsing,Textview,Double,Numberformatexception,在我的Android应用程序中,我正在使用输入到EditText中的值计算一个双值,并尝试将答案输入到TextView中。我的代码是: double scoreDouble; TextView score; EditText gpa; EditText sat; EditText act; Button calc; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInst

在我的Android应用程序中,我正在使用输入到EditText中的值计算一个双值,并尝试将答案输入到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);
            }


        }
    });
}

现在,当按下按钮时,文本视图显示:“你的分数是0.0。”我觉得这与我将EditText的默认值设置为0有关。在此之前,我收到一个错误,声明NumberFormatException:invalid double:“”。如果这是问题所在,我应该如何解决它。如果这不是问题所在,那是什么?

您将actInt和saint定义为最终变量,并且它们将只分配给一个值一次(当执行onCreate方法时),并且初始值将在edittext开始时为零,不包含任何内容

要解决这个问题:

将actInt和saint从局部变量移动到字段变量,并删除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);
            }

        }
    });
}
}

您正在使用
onCreate
方法执行所有操作。因此,所有代码都会在应用程序开始时调用。此时,您的
EditText
s为空,代码将转到以下部分:

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

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

 if (actString.equals("")) {
        actString = "0";
 }
这意味着您的值
gpaDouble
actInt
saint
等于0

然后,您将执行以下操作:

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

scoreDouble = (0.6*gpaDouble*25)+(0.4*(satInt/2400)*100);
对于0值,您的
scoredoull
值只能等于0


要解决此问题,请在
按钮的
onClick
方法中获取
编辑文本
s'文本

您的问题到底是什么?它显示0.0而不是0?请尝试使用String.valueOf()而不是Double.toString()。问题是它不应该显示0.0。无论我在编辑文本中输入什么,它都会这样做。同时将其更改为String.valueOf并没有解决问题。是的,这解决了问题。非常感谢你。尊敬。