8
respostas

Usando .putextra

Olá, estou com dificuldades de carregar dados de uma intent para outra, será que poderiam me ajudar?

Tenho este botão que quero que carregue os dados:

private void botaoNovo() {
        novaInspecao = findViewById(R.id.nova_insp);
        novaInspecao.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent vaiParaInspecao = new Intent(ListaInspecoesActivity.this, CadDataKmActivity.class);
                vaiParaInspecao.putExtra("carro", carro);
                startActivity(vaiParaInspecao);
            }
        });
    }

E tenho este codigo na activity para receber:

 private void carregaDadosCarro() {
        Intent intent = getIntent();
        Carro carro = (Carro) intent.getSerializableExtra("carro");
        carronome = findViewById(R.id.carronome);
        carronome.setText(carro.getNome());
        idCarro = findViewById(R.id.carroid);
        idCarro.setText(carro.getId().toString());
    }

Porém, ele dá erro dizendo que o objeto está nulo...

E/AndroidRuntime: FATAL EXCEPTION: main
                  Process: br.com.hlnengenharia.app, PID: 29418
                  java.lang.RuntimeException: Unable to start activity ComponentInfo{br.com.hlnengenharia.app/br.com.hlnengenharia.app.cadastro.CadDataKmActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Long br.com.hlnengenharia.app.model.Carro.getId()' on a null object reference
                      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2572)
                      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2654)
                      at android.app.ActivityThread.-wrap11(ActivityThread.java)
                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1488)
                      at android.os.Handler.dispatchMessage(Handler.java:111)
                      at android.os.Looper.loop(Looper.java:207)
                      at android.app.ActivityThread.main(ActivityThread.java:5728)
                      at java.lang.reflect.Method.invoke(Native Method)
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:679)
                   Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Long br.com.hlnengenharia.app.model.Carro.getId()' on a null object reference
                      at br.com.hlnengenharia.app.cadastro.CadDataKmActivity.carregaDadosCarro(CadDataKmActivity.java:55)
                      at br.com.hlnengenharia.app.cadastro.CadDataKmActivity.onCreate(CadDataKmActivity.java:41)
                      at android.app.Activity.performCreate(Activity.java:6301)
                      at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1113)
                      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2519)
                      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2654) 
                      at android.app.ActivityThread.-wrap11(ActivityThread.java) 
                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1488) 
                      at android.os.Handler.dispatchMessage(Handler.java:111) 
                      at android.os.Looper.loop(Looper.java:207) 
                      at android.app.ActivityThread.main(ActivityThread.java:5728) 
                      at java.lang.reflect.Method.invoke(Native Method) 
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789) 
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:679)
8 respostas

Rafaela, tudo bem ?

Nesse botão novo, o carro já foi instanciado em algum momento ?

Opa, Matheus, tudo bem sim e com você? Acho que vou pegar você como orientador de uma vez... hahaha desculpe pelo caminhão de duvidas.

Enfim, sim, eu instancio no inicio...

https://github.com/rn-15/App/blob/master/app/src/main/java/br/com/hlnengenharia/app/InspecaoActivity.java

link do git pra voce dar uma olhada

Será que você não queria fazer :

private void carregaNomeDoCheckList() {
        if (nomeInsp != null) {
            Intent intent = getIntent();
            Inspecao inspecao = (Inspecao) intent.getSerializableExtra("nome");
            nomeInsp = findViewById(R.id.nomeInsp);
            nomeInsp.setText(inspecao.getNome());
        } else {
           Intent intent = getIntent();
            this.carro = (Carro) intent.getSerializableExtra("carro");
            nomeInsp = findViewById(R.id.nomeInsp);
            nomeInsp.setText(carro.getNome());
            idCarro = findViewById(R.id.idCarro);
            idCarro.setText(carro.getId().toString());
        }
    }
E/AndroidRuntime: FATAL EXCEPTION: main
                  Process: br.com.hlnengenharia.app, PID: 6299
                  java.lang.RuntimeException: Unable to start activity ComponentInfo{br.com.hlnengenharia.app/br.com.hlnengenharia.app.InspecaoActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String br.com.hlnengenharia.app.model.Inspecao.getNome()' on a null object reference
                      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2572)
                      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2654)
                      at android.app.ActivityThread.-wrap11(ActivityThread.java)
                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1488)
                      at android.os.Handler.dispatchMessage(Handler.java:111)
                      at android.os.Looper.loop(Looper.java:207)
                      at android.app.ActivityThread.main(ActivityThread.java:5728)
                      at java.lang.reflect.Method.invoke(Native Method)
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:679)
                   Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String br.com.hlnengenharia.app.model.Inspecao.getNome()' on a null object reference
                      at br.com.hlnengenharia.app.InspecaoActivity.carregaNomeDoCheckList(InspecaoActivity.java:124)
                      at br.com.hlnengenharia.app.InspecaoActivity.onCreate(InspecaoActivity.java:48)
                      at android.app.Activity.performCreate(Activity.java:6301)
                      at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1113)
                      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2519)
                      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2654) 
                      at android.app.ActivityThread.-wrap11(ActivityThread.java) 
                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1488) 
                      at android.os.Handler.dispatchMessage(Handler.java:111) 
                      at android.os.Looper.loop(Looper.java:207) 
                      at android.app.ActivityThread.main(ActivityThread.java:5728) 
                      at java.lang.reflect.Method.invoke(Native Method) 
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789) 
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:679) 
I/Process: Sending signal. PID: 6299 SIG: 9
Application terminated.

continua o erro... nao sei o que fazer '-' todas outras estao assim e funcionam.

Agora parece que sua inspeção tá nula, tá chegando certinho isso ?

Ai que está a jogada, eu já fiz o IF justamente pra isso... caso for nulo, ele entra no else...

Vi seu código de novo

if (nomeInsp != null) {
            Intent intent = getIntent();
            Inspecao inspecao = (Inspecao) intent.getSerializableExtra("nome");
            nomeInsp = findViewById(R.id.nomeInsp);
            nomeInsp.setText(inspecao.getNome());
        } else {
           Intent intent = getIntent();
            Carro carro = (Carro) intent.getSerializableExtra("carro");
            nomeInsp = findViewById(R.id.nomeInsp);
            nomeInsp.setText(carro.getNome());
            idCarro = findViewById(R.id.idCarro);
            idCarro.setText(carro.getId().toString());
        }

O seu if é pertinente ao campo da tela que apriori não está nulo, contudo a inspeção, que você tenta recuperar da intent está :(

Por isso está levando o nullpointer, dá uma olhadinha e vê se está realmente vindo de uma activity para outra.

Acredito que seja alguma coisa relacionada com a ordem de chamar os metodos, porque não há outra explicação... rs