Fazer a listagem de imagens do Firebase Storage em um fragment
27/07/2018
0
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):
FeedFragment.java(onde a listagem é exibida):
FeedAdapter.java(Adapter para fazer a listagem):
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); } }
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); } } }
Luis Rebecca
Curtir tópico
+ 0
Responder
Clique aqui para fazer login e interagir na Comunidade :)