当我按下按钮app力关闭?

时间:2012-03-04 19:23:14

标签: java android logcat

我有一个强制关闭的活动,我得到一个logcat错误。它是一个简单的计算器活动,它工作5分钟前这里是logcat:

03-04 14:14:57.292: D/dalvikvm(14349): GC_EXTERNAL_ALLOC freed 47K, 49% free 2793K/5379K, external 1596K/2108K, paused 100ms
03-04 14:14:57.492: D/dalvikvm(14349): GC_EXTERNAL_ALLOC freed 1K, 49% free 2792K/5379K, external 3471K/4335K, paused 75ms
03-04 14:14:58.160: D/dalvikvm(14349): GC_EXTERNAL_ALLOC freed <1K, 49% free 2794K/5379K, external 5048K/5580K, paused 132ms
03-04 14:14:58.453: D/dalvikvm(14349): GC_EXTERNAL_ALLOC freed <1K, 49% free 2795K/5379K, external 8143K/8403K, paused 50ms
03-04 14:15:02.945: D/AndroidRuntime(14349): Shutting down VM
03-04 14:15:02.945: W/dalvikvm(14349): threadid=1: thread exiting with uncaught exception (group=0x40015578)
03-04 14:15:02.972: E/AndroidRuntime(14349): FATAL EXCEPTION: main
03-04 14:15:02.972: E/AndroidRuntime(14349): java.lang.RuntimeException: Unable to start activity ComponentInfo{izzy.n/izzy.n.calculator}: java.lang.ClassCastException: android.widget.Button
03-04 14:15:02.972: E/AndroidRuntime(14349):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1651)
03-04 14:15:02.972: E/AndroidRuntime(14349):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667)
03-04 14:15:02.972: E/AndroidRuntime(14349):    at android.app.ActivityThread.access$1500(ActivityThread.java:117)
03-04 14:15:02.972: E/AndroidRuntime(14349):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:935)
03-04 14:15:02.972: E/AndroidRuntime(14349):    at android.os.Handler.dispatchMessage(Handler.java:99)
03-04 14:15:02.972: E/AndroidRuntime(14349):    at android.os.Looper.loop(Looper.java:130)
03-04 14:15:02.972: E/AndroidRuntime(14349):    at android.app.ActivityThread.main(ActivityThread.java:3687)
03-04 14:15:02.972: E/AndroidRuntime(14349):    at java.lang.reflect.Method.invokeNative(Native Method)
03-04 14:15:02.972: E/AndroidRuntime(14349):    at java.lang.reflect.Method.invoke(Method.java:507)
03-04 14:15:02.972: E/AndroidRuntime(14349):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:842)
03-04 14:15:02.972: E/AndroidRuntime(14349):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
03-04 14:15:02.972: E/AndroidRuntime(14349):    at dalvik.system.NativeStart.main(Native Method)
03-04 14:15:02.972: E/AndroidRuntime(14349): Caused by: java.lang.ClassCastException: android.widget.Button
03-04 14:15:02.972: E/AndroidRuntime(14349):    at izzy.n.calculator.onCreate(calculator.java:24)
03-04 14:15:02.972: E/AndroidRuntime(14349):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
03-04 14:15:02.972: E/AndroidRuntime(14349):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1615)
03-04 14:15:02.972: E/AndroidRuntime(14349):    ... 11 more
03-04 14:19:11.265: D/dalvikvm(14411): GC_EXTERNAL_ALLOC freed 50K, 49% free 2793K/5379K, external 1596K/2108K, paused 136ms
03-04 14:19:11.320: D/dalvikvm(14411): GC_EXTERNAL_ALLOC freed 1K, 49% free 2792K/5379K, external 3471K/4335K, paused 18ms
03-04 14:19:11.570: D/dalvikvm(14411): GC_EXTERNAL_ALLOC freed <1K, 49% free 2794K/5379K, external 5048K/5580K, paused 19ms
03-04 14:19:12.152: D/dalvikvm(14411): GC_EXTERNAL_ALLOC freed <1K, 49% free 2795K/5379K, external 8143K/8403K, paused 19ms
03-04 14:19:47.945: D/AndroidRuntime(14411): Shutting down VM
03-04 14:19:47.945: W/dalvikvm(14411): threadid=1: thread exiting with uncaught exception (group=0x40015578)
03-04 14:19:47.960: E/AndroidRuntime(14411): FATAL EXCEPTION: main
03-04 14:19:47.960: E/AndroidRuntime(14411): java.lang.RuntimeException: Unable to start activity ComponentInfo{izzy.n/izzy.n.calculator}: java.lang.ClassCastException: android.widget.Button
03-04 14:19:47.960: E/AndroidRuntime(14411):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1651)
03-04 14:19:47.960: E/AndroidRuntime(14411):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667)
03-04 14:19:47.960: E/AndroidRuntime(14411):    at android.app.ActivityThread.access$1500(ActivityThread.java:117)
03-04 14:19:47.960: E/AndroidRuntime(14411):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:935)
03-04 14:19:47.960: E/AndroidRuntime(14411):    at android.os.Handler.dispatchMessage(Handler.java:99)
03-04 14:19:47.960: E/AndroidRuntime(14411):    at android.os.Looper.loop(Looper.java:130)
03-04 14:19:47.960: E/AndroidRuntime(14411):    at android.app.ActivityThread.main(ActivityThread.java:3687)
03-04 14:19:47.960: E/AndroidRuntime(14411):    at java.lang.reflect.Method.invokeNative(Native Method)
03-04 14:19:47.960: E/AndroidRuntime(14411):    at java.lang.reflect.Method.invoke(Method.java:507)
03-04 14:19:47.960: E/AndroidRuntime(14411):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:842)
03-04 14:19:47.960: E/AndroidRuntime(14411):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
03-04 14:19:47.960: E/AndroidRuntime(14411):    at dalvik.system.NativeStart.main(Native Method)
03-04 14:19:47.960: E/AndroidRuntime(14411): Caused by: java.lang.ClassCastException: android.widget.Button
03-04 14:19:47.960: E/AndroidRuntime(14411):    at izzy.n.calculator.onCreate(calculator.java:24)
03-04 14:19:47.960: E/AndroidRuntime(14411):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
03-04 14:19:47.960: E/AndroidRuntime(14411):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1615)
03-04 14:19:47.960: E/AndroidRuntime(14411):    ... 11 more

这里是calculator.java(在eclipse中没有错误):

public class calculator extends Activity {
        private EditText input1;
        private EditText input2;
        private EditText solution;
        private TextView operator;
        private calculator mContext;

        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.calc);

                input1 = (EditText) findViewById(R.id.input1);
                input2 = (EditText) findViewById(R.id.input2);
                solution = (EditText) findViewById(R.id.solution);
                operator = (TextView) findViewById(R.id.operator);

                // We create an OnClick Event in each button.

                Button plusButton = (Button) findViewById(R.id.plusbutton);
                Button minusButton = (Button) findViewById(R.id.minusbutton);
                Button prodButton = (Button) findViewById(R.id.prodbutton);
                Button divButton = (Button) findViewById(R.id.divbutton);
                Button equalButton = (Button) findViewById(R.id.equalbutton);

                plusButton.setOnClickListener(new OnClickListener() {

                        public void onClick(View arg0) {

                                operator.setText("+");

                        }

                });

                minusButton.setOnClickListener(new OnClickListener() {

                        public void onClick(View arg0) {

                                operator.setText("-");

                        }

                });

                prodButton.setOnClickListener(new OnClickListener() {

                        public void onClick(View arg0) {

                                operator.setText("*");

                        }

                });

                divButton.setOnClickListener(new OnClickListener() {

                        public void onClick(View arg0) {

                                operator.setText("/");

                        }

                });

                equalButton.setOnClickListener(new OnClickListener() {

                        private AlertDialog show;

                        public void onClick(View arg0) {

                                if ((input1.getText().length() == 0)
                                                || (input1.getText().toString() == " ")
                                                || (input2.getText().length() == 0)
                                                || (input2.getText().toString() == " ")) {

                                        show = new AlertDialog.Builder(mContext).setTitle("Error")
                                                        .setMessage("Some inputs are empty")
                                                        .setPositiveButton("OK", null).show();

                                } else if (operator.getText().equals("")) {

                                        show = new AlertDialog.Builder(mContext).setTitle("Error")
                                                        .setMessage("Operator is null").setPositiveButton(
                                                                        "OK", null).show();

                                } else if (operator.getText().equals("+")) {

                                        double result = new Double(input1.getText().toString())
                                                        + new Double(input2.getText().toString());

                                        solution.setText(Double.toString(result));

                                } else if (operator.getText().equals("-")) {

                                        double result = new Double(input1.getText().toString())
                                                        - new Double(input2.getText().toString());

                                        solution.setText(Double.toString(result));

                                } else if (operator.getText().equals("*")) {

                                        double result = new Double(input1.getText().toString())
                                                        * new Double(input2.getText().toString());

                                        solution.setText(Double.toString(result));

                                } else if (operator.getText().equals("/")) {


                                        double result = new Double(input1.getText().toString())
                                                        / new Double(input2.getText().toString());

                                        solution.setText(Double.toString(result));

                                }

                        }

                });

        }

}

这是main.xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@drawable/gray" >

    <ImageView
        android:id="@+id/imageView2"
        android:layout_width="120dp"
        android:layout_height="120dp"
        android:layout_marginLeft="15dp"
        android:layout_marginTop="40dp"
        android:src="@drawable/notes" />

    <ImageView
        android:id="@+id/imageView3"
        android:layout_width="165dp"
        android:layout_height="165dp"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:layout_marginRight="-2dp"
        android:layout_marginTop="20dp"
        android:src="@drawable/calc" />

    <Button
        android:id="@+id/button10"
        android:layout_width="120dp"
        android:layout_height="120dp"
        android:layout_alignLeft="@+id/imageView3"
        android:layout_alignTop="@+id/imageView2"
        android:layout_marginLeft="19dp"
        android:background="@null" />

    <Button
        android:id="@+id/button1"
        android:layout_width="120dp"
        android:layout_height="120dp"
        android:layout_alignLeft="@+id/imageView2"
        android:layout_alignTop="@+id/imageView2"
        android:background="@null" />

</RelativeLayout>

calc.xml:

<?xml version="1.0" encoding="utf-8"?>
<AbsoluteLayout android:id="@+id/widget45"
        android:layout_width="fill_parent" android:layout_height="fill_parent"
        xmlns:android="http://schemas.android.com/apk/res/android">
        <Button android:id="@+id/divbutton" android:layout_width="wrap_content"
                android:layout_height="wrap_content" android:text="/"
                android:layout_x="192px" android:layout_y="86px">
        </Button>
        <Button android:id="@+id/minusbutton" android:layout_width="wrap_content"
                android:layout_height="wrap_content" android:text="-"
                android:layout_x="254px" android:layout_y="18px">
        </Button>
        <EditText android:id="@+id/input1" android:layout_width="160px"
                android:layout_height="wrap_content" android:textSize="18sp"

                android:numeric = "decimal|signed"
                android:layout_x="8px" android:layout_y="13px">
        </EditText>
        <EditText android:id="@+id/input2" android:layout_width="156px"
                android:layout_height="wrap_content" android:textSize="18sp"
                android:numeric = "decimal|signed"
                android:layout_x="10px" android:layout_y="109px">
        </EditText>
        <Button android:id="@+id/plusbutton" android:layout_width="wrap_content"
                android:layout_height="wrap_content" android:text="+"
                android:layout_x="193px" android:layout_y="19px">
        </Button>
        <TextView android:id="@+id/operator" android:layout_width="wrap_content"
                android:layout_height="wrap_content" android:layout_x="33px"
                android:layout_y="77px">
        </TextView>
        <EditText android:id="@+id/solution" android:layout_width="304px"
                android:layout_height="wrap_content" android:textSize="18sp"
                android:layout_x="7px" android:layout_y="214px">
        </EditText>
        <Button android:id="@+id/prodbutton" android:layout_width="wrap_content"
                android:layout_height="wrap_content" android:text="*"
                android:layout_x="253px" android:layout_y="87px">
        </Button>
        <Button android:id="@+id/equalbutton" android:layout_width="120px"
                android:layout_height="wrap_content" android:text="="
                android:layout_x="192px" android:layout_y="149px">
        </Button>
</AbsoluteLayout>

1 个答案:

答案 0 :(得分:1)

你的问题在这里: java.lang.RuntimeException:无法启动活动ComponentInfo {izzy.n / izzy.n.calculator}:java.lang.ClassCastException:android.widget.Button

这是什么意思,就是你正在向一个不是Button的Button投射东西。 如果您转到XML文件,请检查其中哪一个不是Button。

也许您使用的是ImageButton?如果你这样做,它需要改为按钮。

            Button plusButton = (Button) findViewById(R.id.plusbutton);
            Button minusButton = (Button) findViewById(R.id.minusbutton);
            Button prodButton = (Button) findViewById(R.id.prodbutton);
            Button divButton = (Button) findViewById(R.id.divbutton);
            Button equalButton = (Button) findViewById(R.id.equalbutton);

如果这不是您的修复,请发布您的XML文档R.layout.calc。