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

Fazer a listagem de imagens do Firebase Storage em um fragment

firebase
android
Tags: #<Tag:0x00007f6543ae3350> #<Tag:0x00007f6543ae31e8>
#1

Olá, estou fazendo um projeto em Android e estou com algumas dificuldades em ralação a fazer uma listagem de imagens(Feed), onde as imagens são retiradas do firebase e são apresentadas em um fragment. Um esquema praticamente igual ao Instagram;

Por enquanto estou tentando fazer a listagem somente das imagens, porem as imagens não aparecem já fiz diversos testes e queria saber aonde posso estar errando.

Segue abaixo os códigos usados para fazer a listagem de imagens:

MainActivity.java(Trecho que publica a imagem no Firebase Storage):

@Override
public boolean onOptionsItemSelected(MenuItem item) {

    switch (item.getItemId()) {

        case R.id.item_sair:

            deslogarUsuario();
            return true;

        case R.id.item_adicionar:

            abrirCadastroContato();
            return true;


        case R.id.item_configuracoes:
            return true;

        case R.id.item_pesquisar:
            return true;

        case R.id.item_camera:

            compartilharFoto();
            return true;

        default:
            return super.onOptionsItemSelected(item);
    }


}

private void compartilharFoto() {

    Intent intent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
    startActivityForResult(intent, 1);

}

//GRAVAR IMAGEM
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    final Postagem postagem = new Postagem();
    postagem.setIdUsuario(idUsuarioLogado);


    caminhoArquivo = data.getData();

    if (requestCode == 1 && resultCode == RESULT_OK && data != null) {

        Bitmap imagem = null;
        try {
            imagem = MediaStore.Images.Media.getBitmap(getContentResolver(), caminhoArquivo);

            ByteArrayOutputStream stream = new ByteArrayOutputStream();
            imagem.compress(Bitmap.CompressFormat.PNG, 75, stream);
            byte[] dadosImagem = stream.toByteArray();

            SimpleDateFormat dateFormat = new SimpleDateFormat("ddmmaaaahhmmss");
            String nomeImagem = dateFormat.format(new Date());

            final StorageReference imagemRef = firebaseStorage
                    .child("imagens")
                    .child("postagens")
                    .child(postagem.getId() + ".jpeg");


            UploadTask uploadTask = imagemRef.putFile(caminhoArquivo);

            Task<Uri> urlTask = uploadTask.continueWithTask(new Continuation<UploadTask.TaskSnapshot, Task<Uri>>() {
                @Override
                public Task<Uri> then(@NonNull Task<UploadTask.TaskSnapshot> task) throws Exception {
                    if (!task.isSuccessful()) {
                        throw task.getException();
                    }

                    // Continue with the task to get the download URL
                    return imagemRef.getDownloadUrl();
                }
            }).addOnCompleteListener(new OnCompleteListener<Uri>() {
                @Override
                public void onComplete(@NonNull Task<Uri> task) {
                    if (task.isSuccessful()) {
                        Uri downloadUri = task.getResult();
                        postagem.setCaminhoFoto(downloadUri.toString());
                        if (postagem.salvar()) {

                            Toast.makeText(MainActivity.this, "Sucesso ao salvar postagem!", Toast.LENGTH_SHORT).show();

                        }
                    }
                }
            });

        } catch (IOException e) {
            e.printStackTrace();
        }


    }

}

FeedFragment.java(onde a listagem é exibida):

    public class FeedFragment extends Fragment {

        private RecyclerView recyclerFeed;
        private FeedAdapter feedAdapter;
        private List<Feed> listaFeed = new ArrayList<>();
        private ValueEventListener valueEventListenerFeed;
        private DatabaseReference feedRef;
        private String idUsuarioLogado;



        public FeedFragment() {
            // Required empty public constructor
        }


        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) {

    //         Inflate the layout for this fragment
            View view =  inflater.inflate(R.layout.fragment_feed, container, false);

            Preferencias preferencias = new Preferencias(getActivity());
            idUsuarioLogado = preferencias.getIdentificador();

            feedRef = ConfiguracaoFirebase.getFirebase()
                    .child("feed")
                    .child(idUsuarioLogado);

            recyclerFeed = view.findViewById(R.id.recyclerFeed);

            feedAdapter = new FeedAdapter(listaFeed, getActivity());

            recyclerFeed.setHasFixedSize(true);
            recyclerFeed.setLayoutManager(new LinearLayoutManager(getActivity()));
            recyclerFeed.setAdapter(feedAdapter);

            return view;
        }

        private void listarFeed(){

            valueEventListenerFeed = feedRef.addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {

                    for(DataSnapshot ds: dataSnapshot.getChildren()){

                        listaFeed.add(ds.getValue(Feed.class));



                    }
                        feedAdapter.notifyDataSetChanged();
                }

                @Override
                public void onCancelled(DatabaseError databaseError) {

                }
            });

        }

        @Override
        public void onStart() {
            super.onStart();
            listarFeed();
            Log.i("teste","teste");
        }

        @Override
        public void onStop() {
            super.onStop();
            feedRef.removeEventListener(valueEventListenerFeed);

        }
    }

fragment_feed.xml(layout do fragment):

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="android"
xmlns:tools="tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".fragment.FeedFragment">

<android.support.v7.widget.RecyclerView
    android:id="@+id/recyclerFeed"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@android:color/holo_purple">

</android.support.v7.widget.RecyclerView>

</LinearLayout>

FeedAdapter.java(Adapter para fazer a listagem):

    public class FeedAdapter extends RecyclerView.Adapter<FeedAdapter.MyViewHolder>{

        private List<Feed> listaFeed;
        private Context context;

        public FeedAdapter(List<Feed> listaFeed, Context context) {
            this.listaFeed = listaFeed;
            this.context = context;
        }

        @NonNull
        @Override
        public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
            View itemLista = LayoutInflater.from(parent.getContext()).inflate(R.layout.lista_postagem, parent, false);
            return new FeedAdapter.MyViewHolder(itemLista);
        }

        @Override
        public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {

            Feed feed = listaFeed.get(position);

    //        Log.i("listaFeedPosition","listaFeed: " + listaFeed.get(position));

            Uri uriFotoPostagem = Uri.parse(feed.getFotoPostagem());

            Glide.with(context).load(uriFotoPostagem).into(holder.fotoPostagem);


        }

        @Override
        public int getItemCount() {
            return listaFeed.size();
        }

        public class MyViewHolder extends RecyclerView.ViewHolder {


            ImageView fotoPostagem;


            public MyViewHolder(View itemView) {
                super(itemView);


                fotoPostagem = itemView.findViewById(R.id.image_lista_postagem);

            }
        }

    }

Feed(model com os getter and setter):

    public class Feed {

        private String id;
        private String fotoPostagem;

        public Feed() {
        }

    public String getFotoPostagem() {
        return fotoPostagem;
    }

    public void setFotoPostagem(String fotoPostagem) {
        this.fotoPostagem = fotoPostagem;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }
}

lista_conversa(layout da lista):

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="android"
    android:layout_width="match_parent" android:layout_height="match_parent">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <ImageView
            android:id="@+id/image_lista_postagem"
            android:layout_width="match_parent"
            android:layout_height="300dp"
            android:scaleType="fitCenter"
            android:padding="8dp"/>
    </LinearLayout>

</RelativeLayout>
0 Likes