Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用TextWatcher从edittext自动获取值并将其相乘?_Java_Android_Textwatcher - Fatal编程技术网

Java 如何使用TextWatcher从edittext自动获取值并将其相乘?

Java 如何使用TextWatcher从edittext自动获取值并将其相乘?,java,android,textwatcher,Java,Android,Textwatcher,当我在edittext中输入数字时,应用程序强制关闭。我希望应用程序在输入值时自动计算BMI,而无需按下按钮 我对TextWatcher一无所知,但我研究并提出了这个代码。但它不起作用。怎么了 public class BodyMassIndex extends Activity implements View.OnClickListener, TextWatcher { double result; EditText age, height, weight; ToggleButton

当我在edittext中输入数字时,应用程序强制关闭。我希望应用程序在输入值时自动计算BMI,而无需按下按钮

我对TextWatcher一无所知,但我研究并提出了这个代码。但它不起作用。怎么了

public class BodyMassIndex extends Activity implements View.OnClickListener,
    TextWatcher {

double result;
EditText age, height, weight;
ToggleButton sex, cmin, kglb;
TextView tvResult;
double heightInt = 1;
double weightInt = 0;
int ageInt;

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.bmi);
    initialize();

    sex.setOnClickListener(this);
    cmin.setOnClickListener(this);
    kglb.setOnClickListener(this);


}

private void initialize() {
    // TODO Auto-generated method stub

    age = (EditText) findViewById(R.id.etAge);
    height = (EditText) findViewById(R.id.etHeight);
    weight = (EditText) findViewById(R.id.etWeight);
    sex = (ToggleButton) findViewById(R.id.tbSex);
    cmin = (ToggleButton) findViewById(R.id.tbCMIN);
    kglb = (ToggleButton) findViewById(R.id.tbKGLB);
    tvResult = (TextView) findViewById(R.id.tvResult);
    age.addTextChangedListener(this);
    height.addTextChangedListener(this);
    weight.addTextChangedListener(this);
}

@Override
public void onClick(View v) {
    // TODO Auto-generated method stub

    switch (v.getId()) {
    case R.id.tbCMIN:
        heightInt = heightInt * 0.0254;
        break;
    case R.id.tbKGLB:
        weightInt = weightInt * 0.45359237;
        break;
    }

}

@Override
public void afterTextChanged(Editable s) {
    // TODO Auto-generated method stub
    calculate();
}

private void calculate() {
    // TODO Auto-generated method stub
     Editable H = height.getText(), W = weight.getText();

    if(H != null)
        heightInt = Double.parseDouble(H.toString());
    if (W != null)
        weightInt = Double.parseDouble(W.toString());

    result = weightInt / (heightInt * heightInt);
    String textResult = "Your BMI is " + result;
    tvResult.setText(textResult);
}

@Override
public void beforeTextChanged(CharSequence s, int start, int count,
        int after) {
    // TODO Auto-generated method stub


}

@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
    // TODO Auto-generated method stub

    }
}

您已经拥有:

 height = (EditText) findViewById(R.id.etHeight);
    weight = (EditText) findViewById(R.id.etWeight);
仅更改calculate()方法:


这里我们假设EditText只包含一个数字而不包含字母。信件将强制关闭应用程序。因此,您必须检查它。

来自about afterTextChanged method:
“但请注意不要让自己陷入无限循环,因为您所做的任何更改都会导致再次递归调用此方法……您可以在
onTextChanged(CharSequence,int,int,int)中使用setSpan(Object,int,int,int)

强制关闭
表示存在堆栈跟踪,请张贴堆栈跟踪,如何设置?是,只能输入数字。你的解决办法行不通。当输入数字时,应用程序仍会崩溃。
private void calculate()
{
//remove the Editable thing declaration...
heightInt = Double.parseDouble(height.getText().toString());
wightInt = Double.parseDouble(weight.getText().toString());
result = weightInt / (heightInt * heightInt);
String textResult = "Your BMI is " + result;
tvResult.setText(textResult);

}