我在将文本放入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)
问题是无法正确获取文本
答案 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);
}