2016-08-29 6 views
0

Ich schreibe einen einfachen Rechner, aber leider funktioniert es nicht.Android: Code Laufzeitfehler

LogCat sagt, dass der Fehler in meinem onClick ist:

at android.view.View$1.onClick(View.java:2072) 

Aber ich bin traurig, dass ich es nicht finden zu sagen. Also bitte hilf mir.

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" 
    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="54dp" 
     android:layout_marginTop="60dp" 
     android:ems="10" /> 


    <EditText 
     android:id="@+id/editText2" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignLeft="@+id/editText1" 
     android:layout_below="@+id/editText1" 
     android:layout_marginTop="74dp" 
     android:ems="10" /> 

    <TextView 
     android:id="@+id/textView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignLeft="@+id/editText1" 
     android:layout_alignParentTop="true" 
     android:layout_marginTop="38dp" 
     android:text="Input first number" /> 

    <TextView 
     android:id="@+id/textView2" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignLeft="@+id/editText2" 
     android:layout_below="@+id/editText1" 
     android:layout_marginTop="36dp" 
     android:text="Input 2nd number" /> 

    <Button 
     android:id="@+id/button1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:onClick="functionCalculator" 
     android:layout_alignLeft="@+id/editText2" 
     android:layout_below="@+id/editText2" 
     android:layout_marginTop="26dp" 
     android:text="+"/> 

    <TextView 
     android:id="@+id/textView3" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_below="@+id/button1" 
     android:layout_marginTop="28dp" 
     android:text="Your result here" /> 

    <TextView 
     android:id="@+id/textView4" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignTop="@+id/textView3" 
     android:layout_marginLeft="20dp" 
     android:layout_toRightOf="@+id/button1" 
     android:text="Result" 
     android:textAppearance="?android:attr/textAppearanceLarge" /> 

    <Button 
     android:id="@+id/button2" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignBottom="@+id/button1" 
     android:layout_alignRight="@+id/textView4" 
     android:text="-" 
     android:onClick="functionCalculator" /> 

</RelativeLayout> 

ActivityMain.java:

package com.example.caculator; 

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

public class MainActivity extends Activity { 

    EditText e1,e2; 
    TextView t1; 

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

     e1= (EditText)findViewById(R.id.editText1); 
     e2 = (EditText)findViewById(R.id.editText2); 
     t1 = (TextView)findViewById(R.id.textView4); 

    } 

    public void functionCalculator(View view) { 
     int number1 , number2 , result; 

     if (view.getId()==R.id.button1) { 
      number1 = Integer.parseInt(e1.getText().toString()); 
      number2 = Integer.parseInt(e2.getText().toString()); 
      result = number1+number2; 
      t1.setText(Integer.toString(result)); 
     } 
     if (view.getId()==R.id.button2) { 
      number1 = Integer.parseInt(e1.getText().toString()); 
      number2 = Integer.parseInt(e2.getText().toString()); 
      result = number1-number2; 
      t1.setText(Integer.toString(result)); 
     } 

    } 


    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 
} 
+0

Bitte senden Sie das vollständige Protokoll –

+0

Was ist der Eingang, den Sie geben zu 'e1' und' e2' (falls vorhanden)? – Shaishav

+0

@Shaishav Eingabe nur e1 und e2 – Nayemuzzaman

Antwort

0

lief ich Ihren Code und in Probleme nicht so lange laufen, wie ich ganze Zahlen in e1 und e2 setzen. Sobald ich Dezimalzahlen eingegeben habe, bin ich genau auf dasselbe Problem gestoßen, das Sie erwähnt haben. Dies liegt daran, dass Sie versuchen, Ganzzahlen aus der Eingabe zu analysieren, die möglicherweise nicht immer erfolgreich sind und zu einem NumberFormatException führen. Sie sollten Ihren Code so schreiben, dass er in keinem Fall abstürzt. Gehen Sie einfach davon aus, dass Ihre Benutzer Idioten sind. Versuchen Sie den Code unten, sollte es nicht zum Absturz bringen:

public void functionCalculator(View view) { 

    try { 
     // Firstly checking for integers 
     int number1, number2; 
     number1 = Integer.parseInt(e1.getText().toString()); 
     number2 = Integer.parseInt(e2.getText().toString()); 

     if (view.getId() == R.id.button1) 
      t1.setText(Integer.toString(number1 + number2)); 

     else if (view.getId() == R.id.button2) 
      t1.setText(Integer.toString(number1 - number2)); 

    } catch (NumberFormatException e) { 
     float number1, number2; 

     try { 
      // Now checking for decimals 
      number1 = Float.parseFloat(e1.getText().toString()); 
      number2 = Float.parseFloat(e2.getText().toString()); 

      if (view.getId() == R.id.button1) 
       t1.setText(Float.toString(number1 + number2)); 

      else if (view.getId() == R.id.button2) 
       t1.setText(Float.toString(number1 - number2)); 

     } catch (NumberFormatException e2) { 
      // No numbers :(
      Toast.makeText(this, "WTF! Enter number here you dingus!", Toast.LENGTH_SHORT).show(); 
     } 
    } 

}