我如何在OnClickListener上编辑TextView

时间:2019-06-04 21:07:12

标签: android

我在将文本放入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)

问题是无法正确获取文本

3 个答案:

答案 0 :(得分:0)

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

tvMensaje=findViewById(R.id.textViewMensaje);

此行之后:

 setContentView(R.layout.activity_main);

然后tvMensafe不会为空,并且您不会收到异常

答案 1 :(得分:0)

您需要

setContentView(R.layout.activity_main);

在找到textview之前

tvMensaje=findViewById(R.id.textViewMensaje);

所以您的onCreate应该类似于

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        setContentView(R.layout.activity_main);
        super.onCreate(savedInstanceState);
        tvMensaje=findViewById(R.id.textViewMensaje);
        nombre="";        
        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);
            }
        });
    }

答案 2 :(得分:0)

当前,您正在尝试查找TextView 之前的ID,该布局实际上已设置为“活动”。

您之所以得到NullPointerException,是因为TextView tvMensaje;在View层次结构中不存在,因为您没有在活动setContentView(R.layout.activity_main);中调用onCreate()来尝试查找视图。

您可以在执行与setContentView(R.layout.whatever)相关的任何操作(如查找)之前调用View来纠正它。

@Override
protected void onCreate(Bundle savedInstanceState) {
    nombre="";
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    tvMensaje=findViewById(R.id.textViewMensaje);
}