简单的计算器应用程序保持崩溃

问题描述:

我是Android的初学者。刚开始使用计算器应用程序,不知道为什么应用程序一直崩溃。简单的计算器应用程序保持崩溃

我有两个活动... MainActivity和CalculatorActivity

MainActivity:

public class MainActivity extends AppCompatActivity 
     {    
      Button calcubtn;    
      @Override 
      protected void onCreate(Bundle savedInstanceState) 
      { 
       super.onCreate(savedInstanceState); 
       setContentView(R.layout.activity_main); 

       calcubtn = (Button) findViewById(R.id.calculatorbtn); 
       calcubtn.setOnClickListener(new View.OnClickListener() 
       { 
        @Override 
        public void onClick(View view) 
        { 
         Intent calculator = new Intent(MainActivity.this, CalculatorActivity.class); 
         startActivity(calculator); 
        } 
       }); 
      } 
     } 

MainActivity布局:

<?xml version="1.0" encoding="utf-8"?> 
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:app="http://schemas.android.com/apk/res-auto" 
     xmlns:tools="http://schemas.android.com/tools" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     tools:context="com.example.rfkha.myfirstapp.MainActivity"> 


     <TextView 
      android:id="@+id/textView" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignParentTop="true" 
      android:layout_centerHorizontal="true" 
      android:layout_marginTop="13dp" 
      android:textSize="27sp" 
      android:textColor="@android:color/holo_red_light" 
      android:text="@string/functions_text" /> 

     <Button 
      android:id="@+id/calculatorbtn" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignParentStart="true" 
      android:layout_below="@+id/textView" 
      android:layout_marginStart="43dp" 
      android:layout_marginTop="70dp" 
      android:text="@string/calcu_string" 

      /> 

    </RelativeLayout> 

CalculatorActivity:(即子活动)

在活动课上,我添加了implements View.OnclickListener。我发现它在某处的计算器中。我认为问题出在这件事上。此外,它需要使用关键字abstract与活动类一起使用,所以我也使用它。

public abstract class CalculatorActivity extends AppCompatActivity implements View.OnClickListener { 

     Button btn1, btn2, btn3, btn4, btn5, btn6, btn7, btn8, btn9, zerobtn, dotbtn, equalbtn, minusbtn, sumbtn, divbtn, mulbtn; 
     double num1, num2; 
     boolean sum, minus, div, mul; 
     EditText textarea= (EditText) findViewById(R.id.textarea); 

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

      btn1 = (Button) findViewById(R.id.btn1); 
      btn1.setOnClickListener(this); 
      (((Same Code for buttons upto 9 and SUM, MINUS, DIVISION and MULtiplication Buttons))) 

      } 

     @Override 
     public void onClick(View v) 
     { 
      switch (v.getId()) 
      { 
       case R.id.btn1: { 
        textarea.setText(textarea.getText()+"1"); 
        break; 
       } 
       case R.id.btn2: { 
        textarea.setText(textarea.getText()+"2"); 
        break; 
       } 
       case R.id.btn3: 

       ((((( And So on... Upto Button 9 )))))) 


       case R.id.zerobtn: { 
        textarea.setText(textarea.getText()+"0"); 
        break; 
       } 
       case R.id.dotbtn: { 
        textarea.setText(textarea.getText()+"."); 
        break; 
       } 
       case R.id.sumbtn: { 
        num1=Double.parseDouble(textarea.getText().toString()); 
        sum=true; 
        textarea.setText(null); 
        break; 
       } 
        (((((Likewise for Minus, Division and Multiplication buttons)))))))))) 

       case R.id.equalbtn: 
        { 
         if (num1!=0) 
         { 
          num2=Double.parseDouble(textarea.getText().toString()); 
          if (sum) { 
           textarea.setText(num1+num2+""); 
           sum=false; 
          } 
          else if(mul) { 
           textarea.setText(num1*num2+""); 
           mul=false; 
          } 
          else if(div) { 
           textarea.setText(num1/num2+""); 
           div=false; 
          } 
          else if(minus) { 
           textarea.setText(num1-num2+""); 
           minus=false; 
          } 

         } 
         else{ 
          Toast.makeText(getApplicationContext(), "First select a number!!", Toast.LENGTH_SHORT); 
         } 
        break; 
        }   
      } 
     } 
    } 

计算器活动布局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:app="http://schemas.android.com/apk/res-auto" 
     xmlns:tools="http://schemas.android.com/tools" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="vertical" 
     android:weightSum="1" 
     tools:context="com.example.rfkha.myfirstapp.CalculatorActivity"> 

     <TextView 
      android:id="@+id/textView2" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_marginBottom="13dp" 
      android:layout_marginTop="8dp" 
      android:gravity="center_horizontal" 
      android:text="@string/calculatortxt" 
      android:textSize="25sp" /> 

     <EditText 
      android:id="@+id/textarea" 
      android:layout_width="351dp" 
      android:layout_height="154dp" 
      android:layout_marginStart="16dp" 
      android:ems="10" 
      android:hint="@string/resultsString" 
      android:textSize="33sp" 
      android:textAlignment="textEnd" 
      android:padding="11dp" 
      android:inputType="textPersonName" /> 

     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="50dp" 
      android:gravity="center_horizontal" 
      android:orientation="horizontal" 
      android:weightSum="1"> 

      <Button 
       android:id="@+id/clearbt" 
       android:layout_width="293dp" 
       android:layout_height="51dp" 
       android:text="@string/cetxt" 
       android:textSize="24sp" /> 

     </LinearLayout> 

     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="50dp" 
      android:gravity="center_horizontal" 
      android:orientation="horizontal"> 

      <Button 
       android:id="@+id/btn7" 
       android:layout_width="68dp" 
       android:layout_height="51dp" 
       android:text="7" 
       android:textSize="24sp" /> 

      <Button 
       android:id="@+id/btn8" 
       android:layout_width="68dp" 
       android:layout_height="51dp" 
       android:text="8" 
       android:textSize="24sp" /> 

      <Button 
       android:id="@+id/btn9" 
       android:layout_width="68dp" 
       android:layout_height="51dp" 
       android:text="9" 
       android:textSize="24sp" /> 

      <Button 
       android:id="@+id/mulbtn" 
       android:layout_width="68dp" 
       android:layout_height="51dp" 
       android:layout_marginStart="27dp" 
       android:text="x" 
       android:textSize="18sp" /> 
     </LinearLayout> 

     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="50dp" 
      android:gravity="center_horizontal" 
      android:orientation="horizontal"> 

      <Button 
       android:id="@+id/btn4" 
       android:layout_width="68dp" 
       android:layout_height="51dp" 
       android:text="4" 
       android:textSize="24sp" /> 

      <Button 
       android:id="@+id/btn5" 
       android:layout_width="68dp" 
       android:layout_height="51dp" 
       android:text="5" 
       android:textSize="24sp" /> 

      <Button 
       android:id="@+id/btn6" 
       android:layout_width="68dp" 
       android:layout_height="51dp" 
       android:text="6" 
       android:textSize="24sp" /> 

      <Button 
       android:id="@+id/minusbtn" 
       android:layout_width="68dp" 
       android:layout_height="51dp" 
       android:layout_marginStart="27dp" 
       android:text="-" 
       android:textSize="24sp" /> 
     </LinearLayout> 

     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="50dp" 
      android:gravity="center_horizontal" 
      android:orientation="horizontal"> 

      <Button 
       android:id="@+id/btn1" 
       android:layout_width="68dp" 
       android:layout_height="51dp" 
       android:text="1" 
       android:textSize="24sp" /> 

      <Button 
       android:id="@+id/btn2" 
       android:layout_width="68dp" 
       android:layout_height="51dp" 
       android:text="2" 
       android:textSize="24sp" /> 

      <Button 
       android:id="@+id/btn3" 
       android:layout_width="68dp" 
       android:layout_height="51dp" 
       android:text="3" 
       android:textSize="24sp" /> 

      <Button 
       android:id="@+id/sumbtn" 
       android:layout_width="68dp" 
       android:layout_height="51dp" 
       android:layout_marginStart="27dp" 
       android:text="+" 
       android:textSize="24sp" /> 
     </LinearLayout> 

     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="50dp" 
      android:gravity="center_horizontal" 
      android:orientation="horizontal"> 

      <Button 
       android:id="@+id/dotbtn" 
       android:layout_width="68dp" 
       android:layout_height="51dp" 
       android:text="." 
       android:textSize="24sp" /> 

      <Button 
       android:id="@+id/zerobtn" 
       android:layout_width="68dp" 
       android:layout_height="51dp" 
       android:text="0" 
       android:textSize="24sp" /> 

      <Button 
       android:id="@+id/equalbtn" 
       android:layout_width="68dp" 
       android:layout_height="51dp" 
       android:text="=" 
       android:textSize="24sp" /> 

      <Button 
       android:id="@+id/divbtn" 
       android:layout_width="68dp" 
       android:layout_height="51dp" 
       android:layout_marginStart="27dp" 
       android:text="/" 
       android:textSize="24sp" /> 
     </LinearLayout> 


    </LinearLayout> 

logcat的:(错误)

链接到的logcat:https://pastebin.com/hbwZVUZg

+0

究竟是什么错误,当它崩溃?如果你给我们这么多的代码,也给我们一些东西*精确定位*错误在哪里。 – hnefatl

+0

你的LogCat有什么错误?你是否在清单上设置了你的活动? [检查这里] [1] [1]:https://*.com/questions/20870202/how-to-add-activity-to-manifest-xml-in-right-way – Xaren

+0

@hnefatl检查“CalculatorActivity”,我已经提到了错误。顺便说一句,错误没有显示在Android工作室,但仍然应用程序崩溃 –

删除抽象关键字。那么行textarea= (EditText) findViewById(R.id.textarea);更改为EditText textarea;并最后把这个onCreate()textarea = (EditText)findViewById(R.id.textarea);

记住,你不能实例化一个抽象类。 here

并检查是否如何您正在使用的版本相同或不依赖于调试here

public class CalculatorActivity extends AppCompatActivity implements View.OnClickListener { 

Button btn1, btn2, btn3, btn4, btn5, btn6, btn7, btn8, btn9, zerobtn, dotbtn, equalbtn, minusbtn, sumbtn, divbtn, mulbtn; 
double num1, num2; 
boolean sum, minus, div, mul; 
EditText textarea; 

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

    textarea = (EditText) findViewById(R.id.textarea); 

将这个代码在onCreate

@Override 
protected void onCreate(Bundle savedInstanceState) 
{ 
    ... 
    textarea = (EditText)findViewById(R.id.textarea); 
    ... 
} 
+1

解释为什么这应该是一个改进 - 大概是通过ID获得控制不是一个有效的操作,直到活动已创建。 – hnefatl

检查。依赖关系之间不应该存在任何版本冲突。

+0

问题解决了兄弟..这是由于'抽象'...感谢@Xaren的第二条评论 –