3
respostas

Outro NullPointerException

Eu tambem teve o problema de null pointer exception na activity de cadastro de usuario, acredito fortemente que tenha sido porque foi chamado o method onCreate() da activity forçando passar dados que não existem ainda, então apos algumas pesquisas achei uma solução que funcionou, meu codigo em kotlin ficou assim:

        val data: Intent = intent
        val name : Student? = data.getSerializableExtra("name") as? Student
        binding.activityRegisterStudentName.setText(name?.name)
        binding.activityRegisterStudentTelephone.setText(name?.telephone)
        binding.activityRegisterStudentEmail.setText(name?.email)

E apos uma outra pesquisa rapida achei esta referencia na documentação:

"Safe" (nullable) cast operator To avoid exceptions, use the safe cast operator as? that returns null on failure.

val x: String? = y as? String

Note that despite the fact that the right-hand side of as? is a non-null type String, the result of the cast is nullable.

Porem não entendi muito bem o que aconteceu ali, por acasso o "?" fez o app ignorar essa parte do codigo ate que a string da lista seja clickado ou porque funcionou? e porque quando vou passar os dados para meus EditText tambem preciso colocar o "?" ?

3 respostas

Oi Derlys tudo bem ?

É exatamente isso que tu falou, quando usamos o objeto?.qlqrCoisa se o objeto for uma referencia nula, essa linha acaba sendo ignorada, dessa maneira não temos nenhuma exceção do tipo NullPointerException, a parte ruim é que as vezes o que tu precisa, acaba ficando muito diferente e tals.

Ai pra essas situações é possível valores default e/ou elvis operator ( ?: )

Olá bom dia

Muito interessante, qual seria a função do elvis operator ( ?: ) ??

Acho que entendi, a chamada segura "?" seria tipo "se não for null, use o valor da variavel, senao ignore-a" e o elvis operator "?:" seria "se não for null, use-a senao use um outro valor padrao a seguir" estaria correta essa afirmativa? se for assim acredito que neste caso estaria correto não usar o elvis operator, certo?