温度转换器Android应用程序

时间:2014-10-03 23:52:53

标签: java android button radio-button

这是我的代码,我不知道为什么计算按钮不起作用。它与我的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更多

1 个答案:

答案 0 :(得分:0)

使用值初始化onCreate上的num,而不是尝试从文本视图中解析不存在的值。

所以,而不是:

num = Double.parseDouble(in.getText().toString());

只是做:

num = 0;

或者,如果您不希望零成为初始值,则不要初始化它。并且在onClick之后正确填充num。

此外,您无需手动取消选中复选框,如果您将它们包含在RadioGroup

内,Android会为您执行此操作