setText()不起作用

时间:2017-10-20 10:52:42

标签: java android nullpointerexception

我在Activity.java中有这段代码:

 public void scan(View view){
    EditText text = (EditText) findViewById(R.id.editText3);
    text.setText("asdas");
}

,这在Activity xml:

<Button
    android:id="@+id/button"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:background="@color/colorPrimary"
    android:onClick="scan"
    android:text="Scane"
    android:textColor="#fff"
    android:layout_marginStart="8dp"
    android:layout_marginEnd="8dp"
    tools:layout_editor_absoluteY="271dp"
    tools:layout_editor_absoluteX="8dp" />

<EditText
    android:id="@+id/editText3"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:ems="10"
    android:inputType="textPersonName"
    android:text="Name"
    tools:layout_editor_absoluteX="89dp"
    tools:layout_editor_absoluteY="165dp" />

当点击按钮时,应用程序崩溃:

Attempt to invoke virtual method 'void 
android.widget.EditText.setText(java.lang.CharSequence)' on a null object reference

为什么,即时通讯使用Android Studio最新版本?

4 个答案:

答案 0 :(得分:0)

似乎findViewById返回null:即由于某种原因它找不到您的编辑文字。

也许您只需要重建项目:Build - Rebuild Project

否则你搞砸了别的东西,必须发布更多信息

答案 1 :(得分:0)

将此Edittext初始化代码放在onCreate方法中。

EditText text;
protected void onCreate(Bundle savedInstanceState) {
 text = (EditText) findViewById(R.id.editText3);
}

public void scan(View view){
    text.setText("asdas");
}

答案 2 :(得分:0)

您的findViewById返回null,因为它没有上下文。 我认为你正在传递view对象用于上下文但不使用它。 尝试更改

EditText text = (EditText) findViewById(R.id.editText3);

EditText text = (EditText) view.findViewById(R.id.editText3);

答案 3 :(得分:0)

在下面的代码中,您将获得相关的EditText对象

EditText text = (EditText) findViewById(R.id.editText3);

然后,您调用该对象的setText()方法,但采用空对象引用

text.setText("asdas");

这意味着您无法正确获取EditText对象。因此,错误的起因来自以下行:

EditText text = (EditText) findViewById(R.id.editText3);

请务必在正确的上下文中调用scan()方法。尝试在onCreate()方法中调用它。如果从其他位置调用findViewById()方法,请务必从正确的上下文中调用它。