2013-05-08 66 views
0

我想我对这里的活动生命周期感到困惑,我试图执行一个简单的权重转换,没有什么特别的。Android计算传递给onClick方法的值

用户输入一个值,选择他们是否希望它转换为lbs或kgs,当他们按'转换'它应该吐出转换后的值,查找堆栈跟踪它似乎有问题与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); 
} 

}

+0

我们展示的堆栈跟踪。 – Ahmad 2013-05-08 15:01:12

+0

日食logcat显示错误打开堆栈跟踪没有这样的文件?我如何查看它,这是否与logcat txt文件相同?我的道歉,堆栈跟踪之前显示一个错误,当我coudlnt得到的活动加载,我有'weightValue = Integer.parseInt(enterWeight.getText()。toString());''包含在initializeVariables()中,我将它移动并加载活动 – dyatesupnorth 2013-05-08 15:06:01

+0

如果字符串不是有效数字,解析可能会失败,因此最好将它包装在try-catch块中并捕获任何NumberFormatException。要进行调试,请将字符串写入日志或将其吐出到屏幕,以便您可以看到进入该功能的确切数据。 – NigelK 2013-05-08 15:21:21

回答

0

我不相信你的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; 

    } 
}); 
+0

谢谢,是啊,我没有设置onCheckedchangeListener,我已经使用上下文(this),因为它在过去的工作,但TextView仍然返回null,虽然 – dyatesupnorth 2013-05-08 16:01:40

+0

请注意,您只能在单选按钮更改时计算该值,然后在单击转换时仅显示该值。这可能不是你以后的行为。我建议在收音机组监听器中记录当前类型(千位或磅)(不要忘记默认为一个或另一个开头),并在转换按钮监听器中进行实际计算。 – NigelK 2013-05-08 16:16:06

+0

它的工作原理!尽管由于某种原因它不会立即显示结果?我必须多次选择单选按钮,并在显示结果之前按下按钮几次? – dyatesupnorth 2013-05-08 16:17:25

0

你有weightValue声明为double,但试图解析integer

double weightValue, 

而是使用

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

我也建议错误检查您输入的值以防用户输入非数字

+0

我仍然得到: 0.0 null返回 – dyatesupnorth 2013-05-08 15:17:03

+0

你如何返回0.0和'null'?我不明白。这是在哪里返回?另外,你是否知道你的logcat? – codeMagic 2013-05-08 15:21:41

+0

如果它在这里'weightValue = Integer.parseInt(enterWeight.getText()。toString());'那么你的'EditText'是'null'或者非数字字符。我会在那里放一个断点,看看这些值是什么。您还需要确保没有空格 – codeMagic 2013-05-08 15:27:40