提问者:小点点

学习Android Java-应用程序失败


我一直在为Android开发尝试学习Java,所以我决定尝试做一个简单的转换器应用来学习。目前,我有一个简单的用户界面,我正在尝试将摄氏转换为华氏。转换器在工作时可在摄氏、华氏和开尔文之间转换。

当我单击应该运行计算方法的按钮时,我得到的错误是“不幸的是,转换器已经停止了。”下面是我的代码,我还包含了视图的XML。


    package com.michaelmurphy.converter;

    import android.app.Activity;
    import android.os.Bundle;
    import android.widget.EditText;
    import android.widget.Spinner;

    public class Temperature extends Activity {

        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) 
        {

            super.onCreate(savedInstanceState);
            setContentView(R.layout.temperature_view);

            // TODO Auto-generated method stub
        }

        public void tempCalc()
        {
            //define variables
            float value = 0;
            String from = "";//for spinner
            String to = "";//for spinner

            //get entered value
            EditText input = (EditText) findViewById(R.id.editText1);
            //convert to string
            String enteredValue = input.getText().toString();
            //convert string into float
            float num = Float.valueOf(enteredValue);

            //retrieve the from spinner value
            final Spinner fromSpinner = (Spinner) findViewById(R.id.spinner1);
            from = fromSpinner.getSelectedItem().toString();    
            //retrieve the to spinner value
            final Spinner toSpinner = (Spinner) findViewById(R.id.spinner1);
            to = toSpinner.getSelectedItem().toString();

            EditText output = (EditText) findViewById(R.id.textView2);

            /*if(from.equals(to)) //the same conversion type
            {
                //error
            }*/

            if(from.equals("Celcius"))
            {
                if(to.equals("Fahrenheit"))
                {
                    value = celToFar(num);
                } 
                else 
                {
                    //value = celToKel(num);
                }
            }
            else if(from.equals("Fahrenheit"))
            {
                if(to.equals("Celcius"))
                {
                    //value = fahToCel(num);
                } 
                else 
                {
                    //value = fahToKel(num);
                }
            }
            else //kelvin
            {
                if(to.equals("Celcius"))
                {
                    //value = kelToCel(num);
                }
                else 
                {
                    //value = kelToFah(num);
                }
            }

            //set the label to variable value
            String valueStr = Float.toString(value);//cast float to string
            output.setText(valueStr);
        }

        public float celToFar(float cel)
        {
            float fah = cel * 9/5 + 32;
            return fah;
        }

    }

查看XML代码:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/app_name"
        android:textAppearance="?android:attr/textAppearanceLarge" />

    <EditText
        android:id="@+id/editText1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:ems="10"
        android:inputType="numberDecimal" >

        <requestFocus />
    </EditText>

    <Spinner
        android:id="@+id/spinner1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:entries="@array/temp_arr" />

    <Spinner
        android:id="@+id/spinner2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:entries="@array/temp_arr" />

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/convertBtn"
        android:onClick="tempCalc" />

    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text=""
        android:textAppearance="?android:attr/textAppearanceLarge" />

</LinearLayout>

有没有人能指出我哪里错了,我不知道。谢谢


共1个答案

匿名用户

更改:

public void tempCalc()

public void tempCalc(View v)

任何onClick方法都需要view参数。如果您没有传递一个,则方法签名不匹配,并且您的应用程序会抛出一个异常。