You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

求助解决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

火山引擎 最新活动