Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Por que meu app está dando erro?

Boa noite,

Estou escrevendo um código para gerar um app que faz um sorteio entre cara e coroa.

Porém, toda vez que eu clico no botão jogar, para ele gerar um número aleatório e a partir disso exibir a imagem da cara ou coroa, o app quebra.

obs 1: não dá erro na compilação

obs 2: o erro é o seguinte:

E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.caraoucoroa, PID: 5306 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.caraoucoroa/com.example.caraoucoroa.MainActivity2}: java.lang.NullPointerException: Attempt to invoke virtual method 'int android.os.Bundle.getInt(java.lang.String)' on a null object reference

As minhas telas são:

package com.example.caraoucoroa;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;

import java.util.Random;

public class MainActivity extends AppCompatActivity {

    private Button botaoJogar;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        botaoJogar = findViewById(R.id.button);
        botaoJogar.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                Intent intent = new Intent(getApplicationContext(), MainActivity2.class);
                startActivity(intent); // faz com que o clique do botao leve para a MainActivity2

                //passar dados para a próxima tela

                int numero = new Random().nextInt(2); // cria numeros randomicos, no total de 2 (0 e 1) e atribui à variável numero
                intent.putExtra("numero", numero);
            }
        });
    }
}
package com.example.caraoucoroa;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.media.Image;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;


public class MainActivity2 extends AppCompatActivity {

    private ImageView imagemResultado;
    private ImageView botaoVoltar;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);

        imagemResultado = findViewById(R.id.imageViewResultado);
        botaoVoltar = findViewById(R.id.imageViewVoltar);

        //recuperar dados
        Bundle dados = getIntent().getExtras();
        int numero = dados.getInt("numero");


        // exibe cara ou coroa de acordo com o resultado
        if (numero == 0) {
            imagemResultado.setImageResource(R.drawable.moeda_cara);
        } else {
            imagemResultado.setImageResource(R.drawable.moeda_coroa);
        }

        botaoVoltar.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
               finish();
            }
        });
    }
}

Muito obrigada pela ajuda

2 respostas
solução!

Maira, tudo bem ?

Pelo que entendi voce tem 2 activities a main vai para main2 e essa por sua vez espera o parametro numero, que não tá chegando, o que causa para ti um null pointer.

O problema está aqui:

    Intent intent = new Intent(getApplicationContext(), MainActivity2.class);
    startActivity(intent); // faz com que o clique do botao leve para a MainActivity2

    //passar dados para a próxima tela

    int numero = new Random().nextInt(2); // cria numeros randomicos, no total de 2 (0 e 1) e atribui à variável numero
    intent.putExtra("numero", numero);

Voce inicia a outra activity antes de passar os dados.

Tenta fazer toda a configuração da intent e após estar configurada, usar o startActivity

Mateus, muitíssimo obrigada, era isso mesmo!

Valeu pela ajuda