这是我的代码,我不知道为什么计算按钮不起作用。它与我的onclick方法有关,但我不确定它为什么不起作用。当我尝试打开它时,我的应用关闭了。如果需要,我会包含我的logcat。我很确定它很容易修复,因为我差不多已经完成了这个应用程序。
package com.example.temperatureconverter;
import android.app.Activity;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.view.Window;
import android.widget.Button;
import android.widget.EditText;
import android.widget.RadioButton;
import java.text.DecimalFormat;
public class Calculate extends Activity
{
private EditText in, out;
private RadioButton rd1, rd2;
private Button btn1;
DecimalFormat f = new DecimalFormat("#.##");
//******************onCreate()*****************************
@Override
protected void onCreate(Bundle b)
{
super.onCreate(b);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_calculate);
in = (EditText)findViewById(R.id.input);
out =(EditText)findViewById(R.id.results);
rd1 =(RadioButton)findViewById(R.id.radio1);
rd2 =(RadioButton)findViewById(R.id.radio2);
btn1 =(Button) findViewById(R.id.btn1);
}
//******************buttonClick()**********************
public void buttonClick(View v)
{
double num = 0;
switch(v.getId())
{
case R.id.radio1:
if(rd1.isChecked())
{
rd1.setChecked(true);
}
break;
case R.id.radio2:
if(rd2.isChecked())
{
rd2.setChecked(true);
}
break;
case R.id.btn1:
if(rd1.isChecked() == true)
{
num = Double.parseDouble(in.getText().toString());
out.setText(String.valueOf(f.format(CelToF(num))));
}
else
{
num = Double.parseDouble(in.getText().toString());
out.setText(String.valueOf(f.format(fToC(num))));
}
}
}
//*****************CelToF()*****************************
public double CelToF(double num)
{
return (9.0/5.0) * num + 32;
}
//*******************fToc()****************************
public double fToC(double num)
{
return (num - 32) * 5.0/9.0;
}
}
这是我的日志猫
10-03 21:11:05.355:D /(2726):HostConnection :: get()建立新主机连接0xb91314c0,tid 2726 10-03 21:11:05.425:W / EGL_emulation(2726):eglSurfaceAttrib未实现 10-03 21:11:05.435:D / OpenGLRenderer(2726):启用调试模式0 10-03 21:11:05.605:D / dalvikvm(2726):GC_FOR_ALLOC释放57K,4%释放3327K / 3448K,暂停42ms,总计45ms 10-03 21:11:10.025:D / AndroidRuntime(2726):关闭VM 10-03 21:11:10.035:W / dalvikvm(2726):threadid = 1:线程退出未捕获的异常(group = 0xadb03ba8) 10-03 21:11:10.115:E / AndroidRuntime(2726):致命异常:主要 10-03 21:11:10.115:E / AndroidRuntime(2726):进程:com.example.temperatureconverter,PID:2726 10-03 21:11:10.115:E / AndroidRuntime(2726):java.lang.IllegalStateException:无法执行活动的方法 10-03 21:11:10.115:E / AndroidRuntime(2726):在android.view.View $ 1.onClick(View.java:3823) 10-03 21:11:10.115:E / AndroidRuntime(2726):在android.view.View.performClick(View.java:4438) 10-03 21:11:10.115:E / AndroidRuntime(2726):在android.view.View $ PerformClick.run(View.java:18422) 10-03 21:11:10.115:E / AndroidRuntime(2726):在android.os.Handler.handleCallback(Handler.java:733) 10-03 21:11:10.115:E / AndroidRuntime(2726):在android.os.Handler.dispatchMessage(Handler.java:95) 10-03 21:11:10.115:E / AndroidRuntime(2726):在android.os.Looper.loop(Looper.java:136) 10-03 21:11:10.115:E / AndroidRuntime(2726):在android.app.ActivityThread.main(ActivityThread.java:5017) 10-03 21:11:10.115:E / AndroidRuntime(2726):at java.lang.reflect.Method.invokeNative(Native Method) 10-03 21:11:10.115:E / AndroidRuntime(2726):at java.lang.reflect.Method.invoke(Method.java:515) 10-03 21:11:10.115:E / AndroidRuntime(2726):at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:779) 10-03 21:11:10.115:E / AndroidRuntime(2726):at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 10-03 21:11:10.115:E / AndroidRuntime(2726):at dalvik.system.NativeStart.main(Native Method) 10-03 21:11:10.115:E / AndroidRuntime(2726):引起:java.lang.reflect.InvocationTargetException 10-03 21:11:10.115:E / AndroidRuntime(2726):at java.lang.reflect.Method.invokeNative(Native Method) 10-03 21:11:10.115:E / AndroidRuntime(2726):at java.lang.reflect.Method.invoke(Method.java:515) 10-03 21:11:10.115:E / AndroidRuntime(2726):在android.view.View $ 1.onClick(View.java:3818) 10-03 21:11:10.115:E / AndroidRuntime(2726):......还有11个 10-03 21:11:10.115:E / AndroidRuntime(2726):引起:java.lang.ClassCastException:android.widget.Button无法强制转换为android.widget.RadioButton 10-03 21:11:10.115:E / AndroidRuntime(2726):at com.example.temperatureconverter.Calculate.buttonClick(Calculate.java:55) 10-03 21:11:10.115:E / AndroidRuntime(2726):... 14更多
答案 0 :(得分:0)
使用值初始化onCreate上的num
,而不是尝试从文本视图中解析不存在的值。
所以,而不是:
num = Double.parseDouble(in.getText().toString());
只是做:
num = 0;
或者,如果您不希望零成为初始值,则不要初始化它。并且在onClick之后正确填充num。
此外,您无需手动取消选中复选框,如果您将它们包含在RadioGroup
内,Android会为您执行此操作