Android中的简单计算器应用程序

时间:2014-03-19 06:53:05

标签: android

当我点击添加按钮而没有在edittext上进行任何操作时,遗憾的是计算器已停止。

        package com.example.calculator;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

public class Calci extends Activity {
TextView t1;
EditText e1,e2;
Button add,sub,mul,div;
Context c;;

String b,a;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_calci);
        e1=(EditText) findViewById(R.id.EditText01);
        e2=(EditText) findViewById(R.id.EditText02);
        add=(Button) findViewById(R.id.add);
        sub=(Button) findViewById(R.id.sub);
        mul=(Button) findViewById(R.id.mul);
        div=(Button) findViewById(R.id.div);
        t1=(TextView) findViewById(R.id.textView1);
        a=e1.getText().toString();
        b=e2.getText().toString();

    }

    public void doSomething(View v){
        if(v.getId()==R.id.add){
            if (a==null & b==null){
                Toast.makeText(c,"PLEASE ENTER SOMETHING", Toast.LENGTH_LONG).show();
            }
            else{



            int result=Integer.parseInt(a) + Integer.parseInt(b);
            t1.setText(Integer.toString(result));
            }
        }

     }

}

当我点击添加按钮时,遗憾的是计算器已停止。

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"
    tools:context=".Calci" >

    <EditText
        android:id="@+id/EditText01"
        android:layout_width="150dp"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:ems="10"
        android:inputType="number" />

    <EditText
        android:id="@+id/EditText02"
        android:layout_width="100dp"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:layout_toRightOf="@+id/EditText01"
        android:ems="10"
        android:inputType="number" />

    <Button
        android:id="@+id/add"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"
        android:layout_below="@+id/EditText01"
        android:layout_marginTop="20dp"
        android:text="ADD" 
        android:onClick="doSomething"/>

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"
        android:layout_below="@+id/button4"
        android:layout_marginTop="44dp"
        android:gravity="center"
        android:textAppearance="?android:attr/textAppearanceLarge" />

    <Button
        android:id="@+id/sub"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"
        android:layout_below="@+id/add"
        android:onClick="doSomething"
        android:text="SUBTRACT" />

    <Button
        android:id="@+id/mul"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"
        android:layout_below="@+id/sub"
        android:onClick="doSomething"
        android:text="MULTIPLY" />

    <Button
        android:id="@+id/div"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"
        android:layout_below="@+id/mul"
        android:onClick="doSomething"
        android:text="DIVIDE" />

</RelativeLayout>

当我点击添加按钮时,遗憾的是计算器已停止。 我现在做什么了

3 个答案:

答案 0 :(得分:2)

首先初始化 t1=(TextView) findViewById(R.id.textView1);

你可以在进行像

这样的过程之前对按钮点击监听器进行空检查验证

if(!(t1.getText.toString().equals("")))显示提醒

答案 1 :(得分:1)

我认为问题是你没有声明你的文本视图,试着像下面那样声明它然后尝试。

t1=(TextView) findViewById(R.id.textView1);

修改

if (e1.getText.toString().trim() == "" && e2.getText.toString().trim() == "")
{
// alert
}
else
{
// do your code
}

所以你的最终代码是

public void doSomething(View v){
            if(v.getId()==R.id.add){
                a=e1.getText().toString();
                b=e2.getText().toString();

               if (a == "" && b == "")
               {
                    // alert
               }
               else
               {
                int result=Integer.parseInt(a) + Integer.parseInt(b);
                t1.setText(Integer.toString(result));
               }
            }

         }

答案 2 :(得分:0)

首先你的功能有误 - 你应该调用 e1.setText(),而不是 t1 ,t1未声明且未初始化。接下来你应该像这样使用OnClickListener:

 public class Calci extends Activity {
 TextView t1;
 EditText e1,e2;
 Button add,sub,mul,div;

  String b,a;
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_calci);
    e1=(EditText) findViewById(R.id.EditText01);
    e2=(EditText) findViewById(R.id.EditText02);
    add=(Button) findViewById(R.id.add);
    sub=(Button) findViewById(R.id.sub);
    mul=(Button) findViewById(R.id.mul);
    div=(Button) findViewById(R.id.div);
    add.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
                         a=e1.getText().toString();
                         b=e2.getText().toString();
                         int result=Integer.parseInt(a) + Integer.parseInt(b);
                         e1.setText(Integer.toString(result));

        }
    });
}


 }

是的,检查文本字段是否为空字符串。

 if((!a.isEmpty())&(!b.isEmpty())) { your code }

最好的方法 - 使用 try-catch 来捕获FormatNumberException

   try {
        int result=Integer.parseInt(a) + Integer.parseInt(b);
        e1.setText(Integer.toString(result));
    }
    catch (FormatNumberException e) {
    Log.d("Exception", e.getMessage());
    }

所以你可以防止所有崩溃。