[RESOLVIDO] - Android Studio - Intent com Envio de ImageView não funciona!

11 respostas
java
W

Boa noite.

Pessoal, seguinte: Tenho 3 Activitys (MainActivity, PrimeiraActivity e SegundaActivity) onde da MainActivity envio um Texto para PrimeiraActivity e uma imagem para SegundaActivity. O envio do texto tá de boa, mas o da imagem não funciona. Não dá erro, mas o app não está nem enviando a imagem da mainActivity para SegundaActivity.

Detalhe, o mesmo código foi implementado da mesma forma em outro projeto e roda, mas nesse não roda não sei pq.

Alguém?

Obg!

11 Respostas

R

Mostra os códigos que vc envia as imgs

Sempre tem algum detalhe que acaba escapando e a gente só percebe depois

W

Certo. Olha, o problema é no envio da imagem. Se vc tirar uma foto, ela vai, mas se não tirar a foto e só quiser enviar a imagem do “W” ela não vai. Fecha a aplicação e não dá erro. No outro projeto, o “W” vai, mas nesse não.

XML (MainActivity):

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <EditText
        android:id="@+id/texto"
        android:layout_width="150dp"
        android:layout_height="150dp"
        android:layout_marginTop="50dp"
        android:background="@color/colorAccent"
        android:textAlignment="center"
        android:textColor="@color/colorPrimaryDark"
        android:textSize="24sp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <Button
        android:id="@+id/enviar_texto"
        style="@android:style/Widget.Button.Inset"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="8dp"
        android:text="@string/enviar_texto"
        android:textColor="@color/colorPrimaryDark"
        android:textSize="24sp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/texto"/>

    <ImageView
        android:id="@+id/icone_w"
        android:layout_width="150dp"
        android:layout_height="150dp"
        android:layout_marginTop="50dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/enviar_texto"
        app:srcCompat="@drawable/icone_w" />

    <TextView
        android:id="@+id/tire_a_foto"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="8dp"
        android:gravity="center"
        android:text="@string/tire_a_foto"
        android:textAlignment="center"
        android:textColor="@color/colorPrimaryDark"
        android:textStyle="bold"
        app:layout_constraintEnd_toEndOf="@+id/icone_w"
        app:layout_constraintStart_toStartOf="@+id/icone_w"
        app:layout_constraintTop_toBottomOf="@+id/icone_w"/>

    <Button
        android:id="@+id/enviar_imagem"
        style="@android:style/Widget.Button.Inset"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="30dp"
        android:text="@string/enviar_imagem"
        android:textColor="@color/colorPrimaryDark"
        android:textSize="24sp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/tire_a_foto" />

</androidx.constraintlayout.widget.ConstraintLayout>

XML (PrimeiraActivity)

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".PrimeiraActivity">

    <TextView
        android:id="@+id/texto_recebido"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="100dp"
        android:text="@string/texto_recebido"
        android:textColor="@color/colorPrimaryDark"
        android:textSize="30sp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <TextView
        android:id="@+id/texto"
        android:layout_width="150dp"
        android:layout_height="150dp"
        android:layout_marginTop="30dp"
        android:background="@color/colorAccent"
        android:textAlignment="center"
        android:textColor="@color/colorPrimaryDark"
        android:textSize="24sp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/texto_recebido" />

</androidx.constraintlayout.widget.ConstraintLayout>

XML (SegundaActivity)

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".SegundaActivity">

    <TextView
        android:id="@+id/texto"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="30dp"
        android:text="@string/imagem_recebida"
        android:textColor="@color/colorPrimaryDark"
        android:textSize="30sp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <com.github.chrisbanes.photoview.PhotoView
        android:id="@+id/foto"
        android:layout_width="350dp"
        android:layout_height="500dp"
        android:layout_marginStart="8dp"
        android:layout_marginTop="8dp"
        android:layout_marginEnd="8dp"
        android:layout_marginBottom="8dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/texto" />

</androidx.constraintlayout.widget.ConstraintLayout>

ACTIVITY (MainActivity)

package estudos.intentsenviodadosimagens;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
import android.provider.MediaStore;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Toast;


public class MainActivity extends AppCompatActivity{

    EditText editText;
    ImageView imageView;
    String stTexto;
    Button btEnviarTexto, btEnviarImagem;

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

        editText = findViewById(R.id.texto);
        imageView = findViewById(R.id.icone_w);
        btEnviarTexto = findViewById(R.id.enviar_texto);
        btEnviarImagem = findViewById(R.id.enviar_imagem);

        // Envia o texto que for digitado no EditText
        btEnviarTexto.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v){
                System.out.println("a1");
                stTexto = editText.getText().toString();
                System.out.println("a2");
                Intent intent = new Intent(getApplicationContext(), PrimeiraActivity.class);
                System.out.println("a3");
                intent.putExtra("envio_texto", stTexto);
                System.out.println("a4");
                startActivity(intent);
                System.out.println("a5");
            }
        });

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

        btEnviarImagem.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View view){
                System.out.println("b1");
                Bitmap bmFoto = ((BitmapDrawable) imageView.getDrawable()).getBitmap();
                System.out.println("b2");
                Intent intent = new Intent(MainActivity.this, SegundaActivity.class);
                System.out.println("b3");
                intent.putExtra("envio_imagem", bmFoto);
                System.out.println("b4");
                startActivity(intent);
                System.out.println("b5");
            }
        });
    }

    // Método que recebe o resultado da Câmera do celular QUANDO "imageView" É CLICADA!
    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);// seta a imageView para a foto tirada
            }
            catch(Exception e){
                Toast.makeText(this, R.string.falha, Toast.LENGTH_SHORT).show();
            }
        }
    }
}

ACTIVITY (PrimeiraActivity)

package estudos.intentsenviodadosimagens;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;


public class PrimeiraActivity extends AppCompatActivity{

    TextView tvTextoRecebido;
    String stIntentTexto;

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

        System.out.println("w1");
        tvTextoRecebido = findViewById(R.id.texto);
        System.out.println("w2");
        stIntentTexto = getIntent().getStringExtra("envio_texto");// recebe o texto que é enviado quando o botão "btEnviarTexto" do MainActivity é clicado
        System.out.println("w3");
        tvTextoRecebido.setText(stIntentTexto);
        System.out.println("w4");
    }
}

ACTIVITY (SegundaActivity)

package estudos.intentsenviodadosimagens;
import android.graphics.Bitmap;
import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
import android.widget.ImageView;
import com.github.chrisbanes.photoview.PhotoView;


public class SegundaActivity extends AppCompatActivity{

    Bitmap bitmapIntent;
    ImageView imageView;
    PhotoView photoView;

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

        System.out.println("y1");
        bitmapIntent = getIntent().getParcelableExtra("envio_imagem");// Recebe a imagem que é enviada quando o botão "btEnviarImagem" do MainActivity é clicado
        System.out.println("y2");
        photoView = findViewById(R.id.foto);
        System.out.println("y3");
        imageView = new ImageView(this);
        System.out.println("y4");
        imageView.setImageBitmap(bitmapIntent);
        System.out.println("y5");
        photoView.setImageDrawable(imageView.getDrawable());
        System.out.println("y6");
    }
}

Os resultados que tenho quando rodo o app no ENVIO DE TEXTO é o seguinte:

I/System.out: a1
    a2
    a3
    a4
I/System.out: a5
W/ActivityThread: handleWindowVisibility: no activity for token android.os.BinderProxy@7416396
I/System.out: w1
    w2
    w3
I/System.out: w4

Ou seja, todos os souts foram impressos no RUN tanto os do MainActivity, quanto os da PrimeiraActivity.

Mas o resultado do ENVIO DA IMAGEM é o seguinte:

I/System.out: b1
    b2
    b3
I/System.out: b4
I/System.out: b5

Ou seja, ele nem realiza a Intent.

R

vc ja tem alguma img predefinida?

W

Tem. É a “icone-w” na linha app:srcCompat="@drawable/icone_w"

Já testei fazendo assim tbm: android:background="@drawable/icone_w", agora o erro está dando na linha que vc questionou Bitmap bmFoto = ((BitmapDrawable) imageView.getDrawable()).getBitmap();

java.lang.NullPointerException: Attempt to invoke virtual method 'android.graphics.Bitmap android.graphics.drawable.BitmapDrawable.getBitmap()' on a null object reference
    at estudos.intentsenviodadosimagens.MainActivity$3.onClick(MainActivity.java:67)
R

Tenta assim, converte o bitmap pra byte[]

Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.nome_icone);
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.PNG, 100, stream);
byte[] byteArray = stream.toByteArray();

e passa assim:

Intent intent = new Intent(this, OutraAcitivty.class);
intent.putExtra("picture", byteArray);
startActivity(intent);
W

Blz. Mas tem algum erro na implementação?

R

Aparentemente não, mas ainda tô meio assim com esse trecho:

W

Ele funciona normalmente no outro projeto

R

Se funciona no outro deveria funcionar nesse, não há “bugs”, apenas coisas mal configuradas, eu já fiz muito isso, sempre achei q era o Android Studio q era bugado, mas era eu kkkkkk

W

A mesma coisa aconteceu com um Spinner de um Turno que tbm postei aki, ele não rodava de jeito nenhum, mas quando troquei pelo Spinner da Turma e só modifiquei os atributos de Turno pra Turma, a coisa rodou :expressionless: Por isso que akele menino falou no tal fusca in, fusca out vai entender…

W

Não não, não tem bug nem meu, nem do Android Studio.

Testei outras imagens pra enviar de uma Activity pra outra, todas as imagens foram envidas normalmente, mas quando coloco a “icone_w”, o app para de rodar e nem dá erro. Então coloquei a “icone_w” no outro projeto e tbm não abriu! :expressionless: Mesmo renomeando ela.

Logo o problema é a imagem “icone_w”, então reduzi o tamanho para 304x287 e esta (piii…) rodou! Acredita nisso? Mermããão… Tudo certo e vc quebrar a cabeça com um troço desses, é lasca.

Resolvido.

Obg pela atenção @rodriguesabner.

Criado 15 de agosto de 2020
Ultima resposta 20 de ago. de 2020
Respostas 11
Participantes 2