Java 温度转换器android应用程序
这是我的代码,我不知道为什么计算按钮不起作用。这与我的onclick方法有关,但我不确定为什么它不起作用。我的应用程序在尝试打开时关闭。如果需要的话,我会附上我的日志。我很确定这是一个很容易修复的东西,因为我几乎完成了这个应用程序Java 温度转换器android应用程序,java,android,button,radio-button,Java,Android,Button,Radio Button,这是我的代码,我不知道为什么计算按钮不起作用。这与我的onclick方法有关,但我不确定为什么它不起作用。我的应用程序在尝试打开时关闭。如果需要的话,我会附上我的日志。我很确定这是一个很容易修复的东西,因为我几乎完成了这个应用程序 package com.example.temperatureconverter; import android.app.Activity; import android.os.Bundle; import android.view.KeyEvent; import
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):主机连接::get()新主机连接已建立0xb91314c0,tid 2726
10-03 21:11:05.425:W/EGL_仿真(2726):未实现eglSurfaceAttrib
10-03 21:11:05.435:D/OpenGLRenderer(2726):启用调试模式0
10-03 21:11:05.605:D/dalvikvm(2726):释放57K的所有数据的GC_,4%释放3327K/3448K,暂停42毫秒,总计45毫秒
10-0321:11:10.025:D/AndroidRuntime(2726):关闭虚拟机
10-03 21:11:10.035:W/dalvikvm(2726):threadid=1:线程退出时出现未捕获异常(组=0xadb03ba8)
10-0321:11:10.115:E/AndroidRuntime(2726):致命异常:主
10-0321:11:10.115:E/AndroidRuntime(2726):进程:com.example.temperatureconverter,PID:2726
10-03 21:11:10.115:E/AndroidRuntime(2726):java.lang.IllegalStateException:无法执行活动的方法
10-0321:11:10.115:E/AndroidRuntime(2726):在android.view.view$1.onClick(view.java:3823)
10-0321:11:10.115:E/AndroidRuntime(2726):在android.view.view.performClick(view.java:4438)
10-0321:11:10.115:E/AndroidRuntime(2726):在android.view.view$PerformClick.run(view.java:18422)
10-0321:11:10.115:E/AndroidRuntime(2726):在android.os.Handler.handleCallback(Handler.java:733)上
10-0321:11:10.115:E/AndroidRuntime(2726):在android.os.Handler.dispatchMessage(Handler.java:95)上
10-0321:11:10.115:E/AndroidRuntime(2726):在android.os.Looper.loop(Looper.java:136)
10-0321:11:10.115:E/AndroidRuntime(2726):在android.app.ActivityThread.main(ActivityThread.java:5017)上
10-0321:11:10.115:E/AndroidRuntime(2726):位于java.lang.reflect.Method.Invokenactive(本机方法)
10-0321:11:10.115:E/AndroidRuntime(2726):在java.lang.reflect.Method.invoke(Method.java:515)
10-03 21:11:10.115:E/AndroidRuntime(2726):在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
10-0321:11:10.115:E/AndroidRuntime(2726):位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
10-03 21:11:10.115:E/AndroidRuntime(2726):在dalvik.system.NativeStart.main(本机方法)
10-0321:11:10.115:E/AndroidRuntime(2726):由以下原因引起:java.lang.reflect.InvocationTargetException
10-0321:11:10.115:E/AndroidRuntime(2726):位于java.lang.reflect.Method.Invokenactive(本机方法)
10-0321:11:10.115:E/AndroidRuntime(2726):在java.lang.reflect.Method.invoke(Method.java:515)
10-0321:11:10.115:E/AndroidRuntime(2726):在android.view.view$1.onClick(view.java:3818)
10-0321: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-0321:11:10.115:E/AndroidRuntime(2726):在com.example.temperatureconverter.Calculate.button点击(Calculate.java:55)
10-0321:11:10.115:E/AndroidRuntime(2726):。。。14更多使用值初始化onCreate上的
num
,而不是尝试从文本视图解析不存在的值
因此,与此相反:
num = Double.parseDouble(in.getText().toString());
只要做:
num = 0;
或者,如果您不希望零成为初始值,就不要初始化它。并在onClick之后正确填充num
此外,您不需要手动取消选中复选框,如果您将它们包装在一个中,android会为您执行此操作。请尝试删除parseDouble中的.tostring。请发布stacktrace。“如果需要,我将包括我的logcat。”当您的应用程序崩溃时,它总是非常有用。另外,将解析代码封装在
try/catch
中总是一个好主意。等等……你是说他应该为他的变量使用一些任意值,而不是他需要的值吗?我还错过了他取消选中任何框的地方。复选框通常不应该在RadioGroup
中,因为这不是用户希望它们工作的方式。根本不是,我只是指出他没有正确初始化他的值。实际上,根本不需要初始化,因为在用户实际单击按钮之前,他不会使用num。好的,我在onCreate()
中错过了它。我以为您指的是在onClick()中完成的位置