Java Android计算传递给onClick方法的值

Java Android计算传递给onClick方法的值,java,android,math,Java,Android,Math,我想我对这里的活动生命周期感到困惑,我试图执行一个简单的权重转换,没有什么了不起的 用户输入一个值,选择是否要将其转换为lbs或KG,当他们按下“转换”时,它应该吐出转换后的值,查看堆栈跟踪,它似乎在使用parseInt im时遇到问题 public class WeightConverter extends Activity implements OnClickListener, OnCheckedChangeListener { Button convertWeight; TextView

我想我对这里的活动生命周期感到困惑,我试图执行一个简单的权重转换,没有什么了不起的

用户输入一个值,选择是否要将其转换为lbs或KG,当他们按下“转换”时,它应该吐出转换后的值,查看堆栈跟踪,它似乎在使用parseInt im时遇到问题

public class WeightConverter extends Activity implements OnClickListener, OnCheckedChangeListener {
Button convertWeight;
TextView conversionResults;
EditText enterWeight;
RadioGroup weightPicker;
RadioButton radKG, radLB;
double weightValue, convertedWeight;
String weightString;
String measurement;


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

private void initializeVariables() {
    convertWeight = (Button) findViewById(R.id.btnConvertWeight);
    conversionResults =(TextView) findViewById(R.id.tvWeightConversion);
    enterWeight =(EditText) findViewById(R.id.etWeightToConvert);
    weightPicker = (RadioGroup) findViewById(R.id.rgWeightType);
    radKG = (RadioButton) findViewById(R.id.radKG);
    radLB = (RadioButton) findViewById(R.id.radLB);
    convertWeight.setOnClickListener(this);


}

@Override
public void onClick(View v) {
    ;
    switch (v.getId()) {

    case R.id.btnConvertWeight:
        weightValue = Double.parseDouble(enterWeight.getText().toString());

        conversionResults.setText(weightValue + " = " + weightString + measurement);
        break;
    }

}

@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {

    switch (checkedId) {

    case R.id.radKG:
        convertedWeight = weightValue / 2.2;
        measurement = " Kilograms";
        break;
    case R.id.radLB:

        convertedWeight = weightValue * 2.2;
        measurement = " Pounds";
        break;

    }weightString = String.valueOf(convertedWeight);
}

}

您将weightValue声明为
双精度
,但尝试分析
整数

double weightValue,
改用

weightValue = Double.parseDouble(enterWeight.getText().toString());

我还建议对输入的值进行错误检查,以防用户输入非数字

我不确定是否调用了onCheckedChanged方法(您是否看到使用调试器输入它的代码?)

尝试将其分配给您的weightPicker无线电组,如下所示:

weightPicker.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener()
{
    public void onCheckedChanged(RadioGroup group, int checkedId)
    {
        weightValue = Integer.parseInt(enterWeight.getText().toString());
        switch (checkedId) {

        case R.id.radKG:
            convertedWeight = weightValue / 2.2;
            measurement = " Kilograms";
            break;
        case R.id.radLB:

            convertedWeight = weightValue * 2.2;
            measurement = " Pounds";
            break;

    }
});

eclipse中的stack trace.logcat显示打开堆栈跟踪时出错没有这样的文件?!如何查看它,这与logcat txt文件相同吗?很抱歉,堆栈跟踪之前显示了一个错误,当我无法获取要加载的活动时,我有一行“weightValue=Integer.parseInt(enterWeight.getText().toString());”包含在initializeVariables()中,我移动了它,如果字符串不是有效数字,则加载的活动解析可能会失败,因此最好将其包装在try-catch块中并捕获任何NumberFormatException。若要调试此功能,请将字符串写入日志或将其拖至屏幕,以便您可以看到进入函数的确切数据。我仍然得到:0.0 null returned您如何返回0.0和
null
?我不明白。这是在哪里归还的?另外,您是否找到了您的logcat?如果它在这里
weightValue=Integer.parseInt(enterWeight.getText().toString())
则您的
EditText
null
或具有非数字字符。我会在那里放一个断点,看看值是什么。您还需要确保没有空格。我在enterWeight中输入100并选择Kg进行转换,conversionResults.setText返回0.0,“measurement”字符串返回null。我记得你不能像那样把文本分配给字符串?我还将EditText输入设置为仅数字。我不知道最后一句话是什么意思,但看起来您在
setText()
中使用了双精度输入和
Strings
。将所有内容转换为
Strings
然后设置它Hanks,是的,我没有设置onCheckedchangeListener,我使用了上下文(这一点),因为它在过去工作过,TextView仍然返回null,但请注意,您只在单选按钮更改时计算值,然后仅在单击Convert时显示它。这可能不是你想要的行为。我建议在无线电组侦听器中记录当前类型(千克或磅)(不要忘记从一开始就默认为一种或另一种),并在转换按钮侦听器中进行实际计算。这很有效!尽管出于某种原因,它不会立即显示结果?在显示结果之前,我必须选择几次单选按钮并按下几次按钮?我该怎么做?在onClicklistener中有开关盒吗?以及如何默认radiobutton?使用布尔值?您可以有一个布尔值标志(对于千克为false,对于磅为true),并在OnCreate中将其设置为false,同时设置千克单选按钮-在其上使用setChecked(true)。在无线电组侦听器中,根据需要更新标志。然后在convert侦听器中,使用该标志确定要执行的计算。