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