GUJ Discussões   :   últimos tópicos   |   categorias   |   GUJ Respostas

Carregar Imagens do Storage (Firebase) em um ListView (Customizado)

android
firebase
Tags: #<Tag:0x00007fc4bfb927c0> #<Tag:0x00007fc4bfb92680>

#1

Bom dia Pessoal!

Contexto:

Tenho uma tela de cadastro que carrega uma imagem do celular e faz upload para o storage(firebase) e salva os dados no database(firebase), juntamente com a url da foto.
Ex:

Tenho outra tela onde exibo a lista das pessoas cadastradas com seus dados em um ListView(Customizado).
Ex:

No Banco de Dados, fica assim:

E pra pegar os dados do banco eu faço:

StorageReference dbContatos = FirebaseDatabase.getInstance().getReference().child("contatos");

@Override
    protected void onStart() {
        super.onStart();

        dbContatos.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                contatos.clear();
                for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) {
                    Contato c = postSnapshot.getValue(Contato.class);
                    Log.i("URL FOTO", c.getContatoUrlFoto());
                    contatos.add(c);
                }
                ContatoAdapter contatoAdapter = new ContatoAdapter(VisualizarActivity.this, contatos);
                listViewContatos.setAdapter(contatoAdapter);
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });

Até ai beleza!, chega tudo direitinho, conforme eu solicitei :wink:

Lá no ContatoAdapter eu recebo e utilizo o Picasso pra pegar essa imagem.

@Override
    public View getView(int position, View convertView, ViewGroup parent) {
        LayoutInflater inflater = context.getLayoutInflater();
        View listViewItem = inflater.inflate(R.layout.item_lista, null, true);

        ImageView imgItemFoto = (ImageView) listViewItem.findViewById(R.id.imgItemFoto);
        TextView txtItemNome = (TextView) listViewItem.findViewById(R.id.txtItemNome);
        TextView txtItemIdade = (TextView) listViewItem.findViewById(R.id.txtItemIdade);

        Contato c = contatos.get(position);
        Log.i("URL FOTO ADAPTER", c.getContatoUrlFoto());

        Picasso.with(context).load(c.getContatoUrlFoto())
                .resize(100, 100)
                .centerCrop()
                .into(imgItemFoto);

        txtItemNome.setText(c.getContatoNome());
        txtItemIdade.setText(c.getContatoIdade());

        return listViewItem;
   }

Problema:

Não está trazendo as imagens… :weary:

Alguma ideia de como posso resolver isso?

Desde já agradeço a atenção!


#2

Boa tarde, como voce fez para salvar a url da imagem no database(firebase), como pegou a url?


#3

Boa noite grande…

Facinho…

1 - Peguei a imagem que eu queria (No caso da própria câmera)

`Uri caminhoFoto;`

2 - Cria a referência no firebase

StorageReference ref = storage.child("nome pasta a sua escolha" + caminhoFoto.getLastPathSegment());

3 - Seta a imagem lá

ref.putFile(caminhoFoto)

4 - Existem três métodos de callback p/ o comando acima:

.addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
	@Override
	public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
		// Aqui caso de sucesso no upload...
		// Você captura a URL da imagem pra poder salvar
		String urlFoto = taskSnapshot.getDownloadUrl().toString();
		
		// Aqui com o caminho da imagem 'em mãos', vc seta lá no Database
	}
	}).addOnFailureListener(new OnFailureListener() {
	@Override
	public void onFailure(@NonNull Exception e) {
		// Aqui em caso de falha...
	}
}).addOnProgressListener(new OnProgressListener<UploadTask.TaskSnapshot>() {
	@Override
	public void onProgress(UploadTask.TaskSnapshot taskSnapshot) {
		// E aqui se vc quiser implementar uma barra de progresso p/ o upload...
	}
});

#4

Shoow, muito bom, era isso que eu precisava. Deu certo, consegui fazer upload e mostrar a imagem no listview.
Muito obrigado.