Fazer a listagem de imagens do Firebase Storage em um fragment

  • Respostas:0
Luis Felipe
  • Posts no fórum: 7

26/07/2018, 13:01:20 via Web

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):

/**
 * A simple {@link Fragment} subclass.
 */
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>

— alterado em 27/07/2018, 17:55:53

Seja o primeiro a responder