0

我的测试应用程序称为计算器,但我收到“不幸的是,计算器已停止”。AVD 中的错误。我正在使用 API 级别 16 运行我的 Android 虚拟设备。这是我的代码:(就 Eclipse 而言,没有语法错误)

MainActivity.java :

    package com.papps.calculator;

    import android.os.Bundle;
    import android.app.Activity;
    import android.view.Menu;
    import android.widget.TextView;
    import android.widget.Button;

    public class MainActivity extends Activity {
    int num1 = 90;
    int num2 = 90;
    int op = 0;
    int ans = 0;

    TextView answer = (TextView) findViewById(R.id.answer);

    Button ButtonEquals = (Button) findViewById(R.id.ButtonEquals);

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }
    //ONE
    public void none() {
        if(num1 == 90) {
            num1 = 1;
        }
        else if(num2 == 90) {
            num2 = 1;
         }
    }
    //TWO
    public void ntwo() {
        if(num1 == 90) {
            num1 = 2;
        }
        else if(num2 == 90) {
            num2 = 2;
         }
    }
    //THREE
    public void nthree() {
        if(num1 == 90) {
            num1 = 3;
        }
        else if(num2 == 90) {
            num2 = 3;
         }
    }
    //FOUR
    public void nfour() {
        if(num1 == 90) {
            num1 = 4;
        }
        else if(num2 == 90) {
            num2 = 4;
         }
    }
    //FIVE
    public void nfive() {
        if(num1 == 90) {
            num1 = 5;
        }
        else if(num2 == 90) {
            num2 = 5;
         }
    }
    //SIX
    public void nsix() {
        if(num1 == 90) {
            num1 = 6;
        }
        else if(num2 == 90) {
            num2 = 6;
         }
    }
    //SEVEN
    public void nseven() {
        if(num1 == 90) {
            num1 = 7;
        }
        else if(num2 == 90) {
            num2 = 7;
         }
    }
    //EIGHT
    public void neight() {
        if(num1 == 90) {
            num1 = 8;
        }
        else if(num2 == 90) {
            num2 = 8;
         }
    }
    //NINE
    public void nnine() {
        if(num1 == 90) {
            num1 = 9;
        }
        else if(num2 == 90) {
            num2 = 9;
         }
    }
    //ZERO
    public void nzero() {
        if(num1 == 90) {
            num1 = 0;
        }
        else if(num2 == 90) {
            num2 = 0;
         }
    }
    //operators

    //MULTIPLY
    public void multiply() {
        op = 1;
    }
    //Divide
    public void divide() {
        op = 2;
    }
    //Add
    public void add() {
        op = 3;
    }
    //Subtract
    public void subtract() {
        op = 4;
    }

    //EQUALS
    //TextView answer = (TextView) findViewById(R.id.answer);
    //Button ButtonEquals = (Button) findViewById(R.id.ButtonEquals);
    public void equals() {
        if(op == 1){
            answer.setText(num1 * num2);
        }
        else if(op == 2) {
            answer.setText(num1 / num2);
        }
        else if(op == 3) {
            answer.setText(num1 + num2);
        }
        else if(op == 4) {
            answer.setText(num1 - num2);
        }
    }
    }

activity_main.xml :


<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_marginLeft="97dp"
        android:layout_marginTop="16dp"
        android:text="@string/app_name"
        tools:context=".MainActivity" />

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/textView1"
        android:layout_marginLeft="14dp"
        android:layout_marginTop="15dp"
        android:text="1"
        android:onClick = "none" />

    <Button
        android:id="@+id/Button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/button1"
        android:layout_alignBottom="@+id/button1"
        android:layout_alignLeft="@+id/textView1"
        android:layout_marginLeft="15dp"
        android:text="2"
        android:onClick = "ntwo" />

    <Button
        android:id="@+id/Button3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/Button2"
        android:layout_alignBottom="@+id/Button2"
        android:layout_marginLeft="34dp"
        android:layout_toRightOf="@+id/Button2"
        android:text="3"
        android:onClick = "nthree" />

    <Button
        android:id="@+id/Button4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/button1"
        android:layout_below="@+id/button1"
        android:layout_marginTop="36dp"
        android:text="4"
        android:onClick = "nfour" />

    <Button
        android:id="@+id/Button5"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/Button4"
        android:layout_alignBottom="@+id/Button4"
        android:layout_alignLeft="@+id/Button2"
        android:text="5"
        android:onClick = "nfive" />

    <Button
        android:id="@+id/Button6"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/Button5"
        android:layout_alignBottom="@+id/Button5"
        android:layout_alignLeft="@+id/Button3"
        android:text="6" 
        android:onClick = "nsix" />

    <Button
        android:id="@+id/Button7"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/Button4"
        android:layout_centerVertical="true"
        android:text="7" 
        android:onClick = "nseven" />

    <Button
        android:id="@+id/Button8"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:layout_toLeftOf="@+id/Button3"
        android:text="8" 
        android:onClick = "neight" />

    <Button
        android:id="@+id/Button9"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/Button6"
        android:layout_centerVertical="true"
        android:text="9"
        android:onClick = "nnine" />

    <Button
        android:id="@+id/Button0"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/Button8"
        android:layout_below="@+id/Button8"
        android:layout_marginTop="29dp"
        android:text="0"
        android:onClick = "nzero" />

    <Button
        android:id="@+id/ButtonM"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:text="X"
        android:onClick = "multiply" />

    <Button
        android:id="@+id/ButtonD"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_toRightOf="@+id/Button7"
        android:text="/"
        android:onClick = "divide" />

    <Button
        android:id="@+id/ButtonS"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_toRightOf="@+id/textView1"
        android:text="-"
        android:onClick = "subtract" />

    <Button
        android:id="@+id/ButtonA"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_marginLeft="14dp"
        android:layout_toRightOf="@+id/ButtonS"
        android:text="+"
        android:onClick = "add" />

    <TextView
        android:id="@+id/answer"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_above="@+id/ButtonD"
        android:layout_marginBottom="24dp"
        android:layout_toRightOf="@+id/ButtonD"
        android:text="Answer"
        android:textAppearance="?android:attr/textAppearanceLarge" />

    <Button
        android:id="@+id/ButtonEquals"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/answer"
        android:layout_alignBottom="@+id/answer"
        android:layout_toLeftOf="@+id/Button0"
        android:text="="
        android:onClick = "equals" />

</RelativeLayout>

任何帮助表示赞赏!我不知道出了什么问题。

4

2 回答 2

2

您的问题很可能出在全局 View 变量上。调整

TextView answer = (TextView) findViewById(R.id.answer);

    Button ButtonEquals = (Button) findViewById(R.id.ButtonEquals);

所以它只是

TextView answer;
Button ButtonEquals;

然后在 中onCreate(),执行以下操作:

@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

    answer = (TextView) findViewById(R.id.answer);
    ButtonEquals = (Button) findViewById(R.id.ButtonEquals);
    }

您的应用程序可能会崩溃,因为您试图在 Activity 显示任何内容之前访问视图。将代码放在 setContentView 之后可以找到视图并NullPointerException避免

还:

methodName (View view)如果它们是从onClick:属性引用的,则您的方法必须是

您的大多数方法都需要更改,但我将ButtonEquals以此为例。你的 xml 说

android:onClick = "equals"

所以你的代码中的方法需要是

public void equals (View v)

View需要为属性使用的每个方法添加参数。onClick:

于 2012-12-23T20:16:02.170 回答
0

1/ 您可以通过阅读logcat确切地看到问题所在。可以从 Eclipse 中从 Java 角度或使用命令行查看:

adb logcat

2/ 在setContentView()调用之后将 *TextView*s 的实例化移动到onCreate()方法。

于 2012-12-23T20:16:56.280 回答