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

Android 无法理解运行以下代码时应用程序崩溃的原因,android,Android,下面是计算器应用程序的mainactivity代码。在调试过程中,会弹出一条消息说“不幸的是,应用程序已停止”。有人能帮我吗?plzzz无法找出原因 主要活动 package com.example.anindyaroy.calculator; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.But

下面是计算器应用程序的mainactivity代码。在调试过程中,会弹出一条消息说“不幸的是,应用程序已停止”。有人能帮我吗?plzzz无法找出原因 主要活动

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));
}   
}

在setContentView(R.layout.your_layout)函数调用之后,需要在onCreate()方法内调用findViewById(R.id.your_视图)函数


之所以需要这样做,是因为当活动创建视图时,需要调用findViewById(R.id.your_视图),以便成功找到所需的视图。

在setContentView(R.layout.your_layout)函数调用之后,需要在onCreate()方法内调用函数findViewById(R.id.your_视图)


您需要这样做,因为当“活动”创建视图时,findViewById(R.id.your_视图)需要被调用,以便成功找到您需要的视图。

按如下方式更改您的类:

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。

按如下方式更改您的类:

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。

setContentView
之后移动您的this code
findViewById
setContentView
之后移动您的this code
findViewById
更好地编写
TextView值=(TextView)findViewById(R.id.value)也在
onCreate
中。最好编写
TextView值=(TextView)findViewById(R.id.value)也在
onCreate
中。