首页 > 解决方案 > 如何在 OnClickListener 上编辑 TextView

问题描述

我在将文本放入 TextView 时遇到问题。我只想把写入editTextNombre的文本放到tvMensaje

我该如何解决这个错误?我找不到问题....我只知道它在 setText 的第 29 行,但我不知道,因为它返回错误

public class MainActivity extends AppCompatActivity{
    EditText editTextNombre;
    String nombre;
    Button bMostrar;
    TextView tvMensaje;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        nombre="";
        super.onCreate(savedInstanceState);
        tvMensaje=findViewById(R.id.textViewMensaje);
        setContentView(R.layout.activity_main);
        editTextNombre=findViewById(R.id.editTextNombre);
        bMostrar=findViewById(R.id.buttonMostrarNombre);
        bMostrar.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                nombre=editTextNombre.getText().toString();
                Log.i("valor:",nombre);
                tvMensaje.setText(nombre);
            }
        });
    }
}

我收到以下错误:

AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.textoplano, PID: 3027
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference
        at com.example.textoplano.MainActivity$1.onClick(MainActivity.java:29)

问题是没有正确获取文本

标签: android

解决方案


“findViewById”调用返回空值,因为“textViewMensafe”视图对象在调用时不存在。'setContentView' 调用获取包含布局信息的 'activity_main.xml' 文件并创建 View 对象。因此,如果您移动此语句:

tvMensaje=findViewById(R.id.textViewMensaje);

在这一行之后:

 setContentView(R.layout.activity_main);

那么 tvMensafe 不会为空,你不会得到异常


推荐阅读