求助解决LoginActivity中Usuario空指针异常问题
解决LoginActivity中的NullPointerException问题
嘿,这个问题其实挺常见的——你遇到的NullPointerException完全是因为**Usuario对象没被实例化**导致的!
先看报错信息:
java.lang.NullPointerException: Attempt to invoke virtual method 'void myapp.COM.model.Usuario.setEmail(java.lang.String)' on a null object reference
它明明白白告诉你:你在调用usuario.setEmail()的时候,usuario是个空对象,根本没被创建出来。你只是在代码里声明了这个变量,但没给它new一个实例。
具体解决方案
你只需要在使用usuario对象之前,先创建它的实例就行,有两种方式可选:
方式1:在点击事件内部实例化
直接在登录按钮的点击逻辑里new一个Usuario对象:
botaoEntrar.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String textoEmail = campoEmail.getText().toString(); String textosenha = campoSenha.getText().toString(); // 关键!在这里创建Usuario实例 Usuario usuario = new Usuario(); if( !textoEmail.isEmpty() ){ if( !textosenha.isEmpty() ){ usuario.setEmail( textoEmail ); usuario.setSenha( textosenha ); validarLogin( usuario ); }else{ Toast.makeText(LoginActivity.this, "Preencha a senha!", Toast.LENGTH_SHORT).show(); } }else{ Toast.makeText(LoginActivity.this, "Preencha o e-mail!", Toast.LENGTH_SHORT).show(); } } });
方式2:在类成员变量位置初始化
如果usuario是LoginActivity的成员变量,那就在onCreate方法里初始化它:
public class LoginActivity extends AppCompatActivity { // 声明成员变量 private Usuario usuario; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_login); // 在这里初始化对象 usuario = new Usuario(); // 其他初始化代码... progressBar.setVisibility( View.GONE ); botaoEntrar.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 现在就可以正常使用usuario了 String textoEmail = campoEmail.getText().toString(); String textosenha = campoSenha.getText().toString(); if( !textoEmail.isEmpty() ){ if( !textosenha.isEmpty() ){ usuario.setEmail( textoEmail ); usuario.setSenha( textosenha ); validarLogin( usuario ); }else{ Toast.makeText(LoginActivity.this, "Preencha a senha!", Toast.LENGTH_SHORT).show(); } }else{ Toast.makeText(LoginActivity.this, "Preencha o e-mail!", Toast.LENGTH_SHORT).show(); } } }); } }
你的Usuario类已经提供了无参构造方法public Usuario() { },所以直接new就能创建实例,完全没问题。这样修改后,登录时就不会再触发空指针异常啦!
内容的提问来源于stack exchange,提问作者Upz91




