Android Studio - Não consigo passar uma imagem do drawable para outra Activity

5 respostas
java
W

Boa noite.

Eu sempre enviei imagens entre activitys em outros projetos, inclusive enviava imagens do banco de dados do SQLite.

Fiz um novo projeto e fiz a msm implementação. Ele não envia a imagem, o app fecha e não é exibido nenhum erro.

A implementação:

========== PRIMEIRA ACTIVITY ==========

// Atributos
ImageView imageView;
Button btEnviarImagem;

// onCreate
// imageView = findViewById(R.id.icone_w);//Depois de dar erro aki, tentei a linha de baixo
imageView = findViewById(R.drawable.icone_w);// Aki fica sublinhado vermelho dizendo "Expected resource of type id"
btEnviarImagem = findViewById(R.id.enviar_imagem);

btEnviarImagem.setOnClickListener(new View.OnClickListener(){
   @Override
   public void onClick(View v){
		// Converter de ImageView p/ Bitmap (SÓ PODE SER ENVIADA SE FOR DO TIPO BITMAP)
		Bitmap bitmap = ((BitmapDrawable) imageView.getDrawable()).getBitmap();
		Intent intent = new Intent(getApplicationContext(), SegundaActivity.class);
		intent.putExtra("envio_imagem", bitmap);
		startActivity(intent);
   }
});

========== SEGUNDA ACTIVITY ==========

// Atributos
Bitmap bitmapIntent;
ImageView imageView;

// onCreate
          bitmapIntent = getIntent().getParcelableExtra("envio_imagem");
          imageView = findViewById(R.id.icone_w);

          imageView.setImageBitmap(bitmapIntent);

Quando eu pego uma imagem do banco de dados ela vai, mas quando pego do drawable da msm forma, ela não vai. Fecha o app e não dá nenhum erro.

Alguém?
Desde já grata.

5 Respostas

W

Vai entender…

Pra resolver isso fiz o seguinte:

// Ao clicar na imagem ela chama a câmera do celular
          imageView.setOnClickListener(new View.OnClickListener(){
               @Override
               public void onClick(View v){
                    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                    startActivityForResult(intent, 0);
               }
          });

// Seto a imageView no onActivityResult para a imagem tirada pela câmera
     public void onActivityResult(int requestCode, int resultCode, Intent data){
          super.onActivityResult(requestCode, resultCode, data);
          if(requestCode == 0 && resultCode == RESULT_OK && data != null){
               try{
                    Bundle bundle = data.getExtras();
                    Bitmap bitmap = (Bitmap) bundle.get("data");
                    imageView.setImageBitmap(bitmap);
               }
               catch(Exception e){
                    Toast.makeText(this, "FALHA", Toast.LENGTH_SHORT).show();
               }
          }
     }

Quando tiro uma foto e a envio, ela vai! Se eu não clicar, ela não vai! Neh lasca um troço desse? Não é pq ela ta no Drawable, pq nos outros projetos ela tbm tá no drawable e eles enviam!

Fica aí o mistério pra ver quem defifra.

R

O findViewById precisa receber um id que foi setado no XML, vc passou um drawable, por isso o erro.

nao entendi, clicar onde? na imagem?

Pra pegar uma img do drawable:

Drawable drawable = this.getResources().getDrawable(R.drawable.seuCoisa);
W

Testei das duas vezes,findViewById(R.drawable.icone_w) E findViewById(R.id.icone_w):
Com o drawable ele fica subilinhado vermelho, com o id não fica vermelho, mas ambos dão o memso “erro”. Digo “erro” pq ele para de rodar o app, mas não dá nenhum erro no “run” ou no “logcat”.

Sim, quando vc clica na imageView (Esse W de fundo preto que é uma imagem que está no drawable), eu chamo a câmera do celular, daí quando vc tira uma foto, ela é setada para a foto tirada. Aí sim, depois disso é que consigo enviar para outra activity. Mas se eu tentar enviar a imageView (W) antes de tirar a foto, ela não vai.

R

precisa saber o erro pra ter alguma resolução…

da um sout no bitmap quando vc envia sem mandar pra camera, provavelmente está null

W

Não, não tá null não.

sout com imageView = findViewById(R.id.icone_w);

I/System.out: imageView::::androidx.appcompat.widget.AppCompatImageView{3cd3f13 VFED…C… … 260,762-460,962 #7f08008c app:id/icone_w}

Fazendo assim:
Bitmap bitmap = ((BitmapDrawable) imageView.getDrawable()).getBitmap();
e dando um sout no bitmap, fica assim:

I/System.out: bitmap::::android.graphics.Bitmap@3cd3f13

O sensacional, orochimaru, é que ele está implementado da msm forma (control C, control V) em outros projetos, mas nesse ele não funciona, é isso que não entendi.

Criado 9 de maio de 2020
Ultima resposta 9 de mai. de 2020
Respostas 5
Participantes 2