setText方法的NullPointerExeption

时间:2015-08-14 22:34:04

标签: java android onclick settext

我首先会给你Java和XML代码并在下面解释我的问题。

EditText et1;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    EditText et1 = (EditText) findViewById(R.id.et1);
}

//Called when Button clicked
public void calculate(View view) {
    et1.setText("test"); //ERROR IN THIS LINE

}

(相关)XML-Code

<EditText
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:id="@+id/et2"
    android:layout_below="@+id/textView"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:inputType="numberDecimal"/>

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/btnText"
    android:id="@+id/btnCalc"
    android:layout_below="@+id/et2"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:layout_marginTop="49dp"
    android:onClick="calculate"/>

只要点击按钮,我的应用就会关闭。在Android Studio中,我可以看到有一个NullPointerExeption。当我写“EditText et1 =(EditText)findViewById(R.id.et1);”在“计算”方法中,一切正常。所以我的问题是:

  1. 为什么?

  2. 如何制作它以便我可以在每个方法(在这个类中)中使用EditText et1的功能?

  3. 我知道通过阅读其他帖子,findViewById(id)显然会返回“null”,但我使用了正确的ID。

2 个答案:

答案 0 :(得分:1)

您要定义编辑文本两次,而是执行此操作:

EditText et1;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        et1 = (EditText) findViewById(R.id.et1);
    }

    //Called when Button clicked
    public void calculate(View view) {
        et1.setText("test"); //ERROR IN THIS LINE

    }

答案 1 :(得分:0)

You dont have R.id.et1 your id in edit text is et2

EditText et1;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    et1 = (EditText) findViewById(R.id.et2); // change id 
}

//Called when Button clicked
public void calculate(View view) {
    et1.setText("test"); //ERROR IN THIS LINE

}