无法理解下面的代码运行时应用程序崩溃的原因

问题描述:

以下是计算器应用程序主要活动的代码。在调试过程中会弹出一条消息,提示“不幸的是,该应用程序已停止”。谁能帮我这个? plzzz不能figue了原因 MainActivity无法理解下面的代码运行时应用程序崩溃的原因

package com.example.anindyaroy.calculator; 

import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.TextView; 

public class MainActivity extends AppCompatActivity implements View.OnClickListener { 

EditText First = (EditText)findViewById(R.id.FirstNum); 
EditText Second = (EditText)findViewById(R.id.SecondNum); 
EditText Operator = (EditText)findViewById(R.id.Operater); 
Button b = (Button)findViewById(R.id.button); 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    b.setOnClickListener(this); 
} 
public void onClick(View view) 
{ 
    TextView value= (TextView)findViewById(R.id.Value); 
    double first = Double.parseDouble(First.getText().toString()); 
    double second = Double.parseDouble(Second.getText().toString()); 
    String operator = Operator.getText().toString(); 
    char c = operator.charAt(0); 
    double result=0.0; 
    switch(c) 
    { 
     case '+': 
      result = first+second; 
      break; 
     case '-': 
      result = first - second; 
      break; 
     case '*': 
      result = first * second; 
      break; 
     case '/': 
      result = first/second; 
      break; 
     case '%': 
      result = first%second; 
      break; 
     default: 
      value.setText("Invalid"); 
    } 
    value.setText(String.valueOf(result)); 
} 
} 
+0

在'setContentView'之后移动你的代码'findViewById' –

你需要调用函数findViewById(R.id.your_view)内的onCreate()的setContentView(R.layout.your_layout)函数调用之后方法。

您需要这样做是因为findViewById(R.id.your_view)期望在活动创建视图时调用,以便成功查找所需的视图。

更改您的类,如下所示:

public class MainActivity extends AppCompatActivity implements View.OnClickListener { 
    EditText First; 
    EditText Second; 
    EditText Operator; 
    Button b; 

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

     First = (EditText) findViewById(R.id.FirstNum); 
     Second = (EditText) findViewById(R.id.SecondNum); 
     Operator = (EditText) findViewById(R.id.Operater); 
     b = (Button) findViewById(R.id.button); 

     b.setOnClickListener(this); 
    } 
    public void onClick(View view) { 
     TextView value = (TextView) findViewById(R.id.Value); 
     double first = Double.parseDouble(First.getText().toString()); 
     double second = Double.parseDouble(Second.getText().toString()); 
     String operator = Operator.getText().toString(); 
     char c = operator.charAt(0); 
     double result = 0.0; 
     switch (c) { 
      case '+': 
       result = first + second; 
       break; 
      case '-': 
       result = first - second; 
       break; 
      case '*': 
       result = first * second; 
       break; 
      case '/': 
       result = first/second; 
       break; 
      case '%': 
       result = first % second; 
       break; 
      default: 
       value.setText("Invalid"); 
     } 
     value.setText(String.valueOf(result)); 
    } 
} 

您可以将您的setContentView(...)后只能调用findViewById。

+1

在'onCreate'中更好地编写'TextView value =(TextView)findViewById(R.id.Value)'''。 –