0

我想用一个EditText盒子开发一个简单的计算器。没有错误,但它没有运行。每当按下任何按钮时,我的应用程序都会意外停止。我已经尝试了一切。我使用了相同的代码并使用 3 个EditText盒子制作了一个计算器,效果很好。我无法理解错误是什么。

    package com.example.cal;

    import android.os.Bundle;
    import android.app.Activity;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.EditText;
    import android.widget.Button;
    import android.widget.Toast;



    public class MainActivity extends Activity implements OnClickListener {
    EditText text1 ;
    Button add,subtract,mul,div,result;


    @Override
     public void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.activity_main);
     text1 = (EditText) findViewById(R.id.editText1);

    add=  (Button)findViewById(R.id.button1);
    add.setOnClickListener(this);
    subtract=  (Button)findViewById(R.id.button2);
    subtract.setOnClickListener(this);
    mul=  (Button)findViewById(R.id.button3);
    mul.setOnClickListener(this);
    div=  (Button)findViewById(R.id.button4);
    div.setOnClickListener(this);
    result=  (Button)findViewById(R.id.button5);
    result.setOnClickListener(this);
    }
    float c=0;

    public void onClick(View view) {


      float inputValue1 = Float.parseFloat(text1.getText().toString());
      float inputValue2;
        switch(view.getId())
        {

        case R.id.button1:

             Toast.makeText(view.getContext(), "activated", Toast.LENGTH_LONG).show();
             inputValue1 =inputValue1+ Float.parseFloat(text1.getText().toString());


        case R.id.button2:
            Toast.makeText(view.getContext(), "activated", Toast.LENGTH_LONG).show();
            text1.setText("");
            inputValue2 = Float.parseFloat(text1.getText().toString());
            c=inputValue1-inputValue2;
            break;

        case R.id.button3:
             Toast.makeText(view.getContext(), "activated", Toast.LENGTH_LONG).show();
             text1.setText("");
             inputValue2 = Float.parseFloat(text1.getText().toString());
             c=inputValue1*inputValue2;
             break;

        case R.id.button4:
             Toast.makeText(view.getContext(), "activated", Toast.LENGTH_LONG).show();
             text1.setText("");
             inputValue2 = Float.parseFloat(text1.getText().toString());
             c=inputValue1/inputValue2;
             break;
          }

        if(view.getId()==R.id.button5)
        {Toast.makeText(view.getContext(), "activated", Toast.LENGTH_LONG).show();
           text1.setText("result is: "+inputValue1);}
        }
}

这里是我的 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"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >

<EditText
    android:id="@+id/editText1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    android:layout_marginLeft="34dp"
    android:layout_marginTop="18dp"
    android:ems="10"
    android:inputType="numberSigned|numberDecimal"  >

    <requestFocus />
</EditText>

<Button
    android:id="@+id/button1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_below="@+id/editText1"
    android:layout_marginLeft="35dp"
    android:layout_marginTop="27dp"
    android:onClick="onClick"
    android:text="@string/add" />

<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_alignRight="@+id/editText1"
    android:onClick="onClick"
    android:text="@string/subtract" />

<Button
    android:id="@+id/button3"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@+id/editText1"
    android:layout_below="@+id/button1"
    android:layout_marginTop="34dp"
    android:onClick="onClick"
    android:text="@string/mul" />

<Button
    android:id="@+id/button4"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignBaseline="@+id/button3"
    android:layout_alignBottom="@+id/button3"
    android:layout_alignLeft="@+id/button2"
    android:onClick="onClick"
    android:text="@string/div" />

<Button
    android:id="@+id/button5"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/button3"
    android:layout_marginTop="24dp"
    android:layout_toRightOf="@+id/button3"
    android:onClick="onClick"
    android:text="@string/result" /> 

4

2 回答 2

2

现在它工作正常你可以试试dis

package com.example.testandroid;

import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.EditText;
import android.widget.Button;
import android.widget.Toast;



public class MainActivity extends Activity implements OnClickListener {
EditText text1 ;
Button add,subtract,mul,div,result;
float inputValue1 ;
float inputValue2;

@Override
 public void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);
 text1 = (EditText) findViewById(R.id.editText1);

add=  (Button)findViewById(R.id.button1);
add.setOnClickListener(this);
subtract=  (Button)findViewById(R.id.button2);
subtract.setOnClickListener(this);
mul=  (Button)findViewById(R.id.button3);
mul.setOnClickListener(this);
div=  (Button)findViewById(R.id.button4);
div.setOnClickListener(this);
result=  (Button)findViewById(R.id.button5);
result.setOnClickListener(this);
}
float c=0;

public void onClick(View view) {

try{
    Log.d("Input data ", Float.valueOf(text1.getText().toString()).toString());
    inputValue1 = Float.valueOf(text1.getText().toString());

    switch(view.getId())
    {

    case R.id.button1:

        Toast.makeText(view.getContext(), "activated", Toast.LENGTH_LONG).show();
        inputValue1 =inputValue1+ Float.valueOf(text1.getText().toString());


    case R.id.button2:
        Toast.makeText(view.getContext(), "activated", Toast.LENGTH_LONG).show();
        inputValue2 = Float.valueOf(text1.getText().toString());
        c=inputValue1-inputValue2;
        break;

    case R.id.button3:
        Toast.makeText(view.getContext(), "activated", Toast.LENGTH_LONG).show();
        inputValue2 = Float.valueOf(text1.getText().toString());
        c=inputValue1*inputValue2;
        break;

    case R.id.button4:
        Toast.makeText(view.getContext(), "activated", Toast.LENGTH_LONG).show();

        inputValue2 = Float.valueOf(text1.getText().toString());
        c=inputValue1/inputValue2;
        break;
    }

    if(view.getId()==R.id.button5)
    {Toast.makeText(view.getContext(), "activated", Toast.LENGTH_LONG).show();
    text1.setText("result is: "+inputValue1);}
}catch (Exception e) {
    Log.d("Exception", e.getMessage());
}
}
}
于 2013-08-02T09:21:16.337 回答
1

问题是当编辑文本中有空字符串时尝试使用

 try{

 //onclick code
}

catch( NumberFormatException ex ) {

   Log.d("Exception",":"+ex.getMessage());
}

另一件事是您将编辑文本设置为空并在点击时获取其值

    Toast.makeText(view.getContext(), "activated", Toast.LENGTH_LONG).show();
                ext1.setText("");
                inputValue2 = Float.parseFloat(text1.getText().toString());
                c=inputValue1-inputValue2;

从edittext获取值后设置为空

  Toast.makeText(view.getContext(), "activated", Toast.LENGTH_LONG).show();
  inputValue2 = Float.parseFloat(text1.getText().toString());
  c=inputValue1-inputValue2;
  text1.setText("");
于 2013-08-02T09:28:18.983 回答