2013-08-02 89 views
0

我想开发一个仅使用1 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" /> 

+1

您应该添加在Android日志中显示错误,看看它为什么和停在哪里 –

+0

也许有人关掉它? – Malachiasz

+0

检查以确保logcat未被过滤。如果你使用Eclipse,我已经看到它有时会停止接收logcat。如果发生这种情况,您可以杀死运行adb kill-server的adb服务器,然后再运行adb devices来重新启动并显示设备已重新连接。或者如果这不工作关闭日食和模拟器,并再次启动。如果您的应用程序强制关闭,则日志中始终存在错误 – Boardy

回答

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()); 
} 
} 
} 
+0

非常感谢。现在它正在运行。我会很感激,如果你能进一步帮助我。现在everthng是好的,但每次只显示0结果。plzz help !!!! – user2576576

+0

okk我接受你的答案,但plzz帮助我进一步。我是一个初学者和不知道为什么我得到的结果0总是 – user2576576

+0

@ user2576576雅你一定会欢迎,如果你需要任何帮助 – Developer

1

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

try{ 

//onclick code 
} 

catch(NumberFormatException ex) { 

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

而另一件事是,你要设置的编辑文本空的onclick获取其价值

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(""); 
相关问题