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>