I have a application with users post when contains images, but the recycler view not loads any of these images from the firebase storage.I'm beginner on firebase and firebase storage, so maybe i'm doing something wrong. But if i copy the URL of a random image on google the image is loads correct.
Image of my firebase real-time database:
PostModel.java:
package com.sm.socialmeme;
public class PostModel {
String name;
String imgUrl;
// constractors \\
public PostModel(String name, String imgUrl) {
this.name = name;
this.imgUrl = imgUrl;
}
public PostModel(){
}
// getters and setters \\
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getImgUrl() {
return imgUrl;
}
public void setImgUrl(String imgUrl) {
this.imgUrl = imgUrl;
}
}
HomeActivity.java:
package com.sm.socialmeme;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.constraintlayout.widget.ConstraintLayout;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import android.content.ContentResolver;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.webkit.MimeTypeMap;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.LinearLayout;
import android.widget.ProgressBar;
import android.widget.Toast;
import com.google.android.gms.tasks.OnFailureListener;
import com.google.android.gms.tasks.OnSuccessListener;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.Query;
import com.google.firebase.database.ValueEventListener;
import com.google.firebase.storage.FirebaseStorage;
import com.google.firebase.storage.StorageReference;
import com.google.firebase.storage.UploadTask;
import org.jetbrains.annotations.NotNull;
import java.util.ArrayList;
import java.util.List;
public class HomeActivity extends AppCompatActivity {
// global variables \\
DatabaseReference mRef;
List<PostModel> postList;
RecyclerView.Adapter recyclerAdapter;
RecyclerView recyclerView;
ProgressBar progressBar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
final FirebaseAuth mAuth = FirebaseAuth.getInstance();
final FirebaseUser user = mAuth.getCurrentUser();
final ImageButton new_post = findViewById(R.id.new_post_btn);
final ImageButton settings = findViewById(R.id.settingsButton);
recyclerView = findViewById(R.id.recyclerView);
mRef = FirebaseDatabase.getInstance().getReference().child("posts");
progressBar = findViewById(R.id.progressBar4);
progressBar.setVisibility(View.VISIBLE);
postList = new ArrayList<>();
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
if (user == null) {
finish();
startActivity(new Intent(HomeActivity.this, MainActivity.class));
}
mRef.addValueEventListener(new ValueEventListener(){
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot){
for (DataSnapshot snapshot : dataSnapshot.getChildren()){
PostModel post = new PostModel();
post.setImgUrl(snapshot.child("imgUrl").getValue().toString());
post.setName(snapshot.child("name").getValue().toString());
postList.add(post);
// notify adapter when a new item was addeted \\
if (recyclerAdapter != null){
recyclerAdapter.notifyDataSetChanged();
}
}
progressBar.setVisibility(View.GONE);
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError){
Toast.makeText(HomeActivity.this, "Error: " + databaseError, Toast.LENGTH_SHORT).show();
progressBar.setVisibility(View.GONE);
}
});
recyclerAdapter = new RecyclerAdapter(HomeActivity.this,postList);
recyclerView.setAdapter(recyclerAdapter);
recyclerAdapter.notifyDataSetChanged();
settings.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(HomeActivity.this, SettingsActivity.class));
}
});
new_post.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(HomeActivity.this, UploadPhotoActivity.class));
}
});
}
public void clearList(){
if (postList != null){
postList.clear();
if (recyclerAdapter != null){
recyclerAdapter.notifyDataSetChanged();
}
}
postList = new ArrayList<>();
}
}
RecyclerAdapter.java:
package com.sm.socialmeme;
import android.content.Context;
import android.net.Uri;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.bumptech.glide.Glide;
import org.jetbrains.annotations.NotNull;
import java.net.URL;
import java.util.List;
public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.ViewHolder>{
List<PostModel> postList;
Context context;
public RecyclerAdapter(Context context, List<PostModel> postList) {
this.postList = postList;
this.context = context;
}
@NonNull
@NotNull
@Override
public ViewHolder onCreateViewHolder(@NonNull @NotNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.post_item,parent,false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull @NotNull ViewHolder holder, int position) {
//PostModel postModel = postList.get(position);
// set username \\
holder.username.setText(postList.get(position).getName());
// set image URL \\
Glide.with(context)
.load(postList.get(position).getImgUrl())
.into(holder.postImg);
}
@Override
public int getItemCount() {
return postList.size();
}
public static class ViewHolder extends RecyclerView.ViewHolder{
TextView username;
ImageView postImg;
public ViewHolder(@NonNull @NotNull View itemView) {
super(itemView);
username = itemView.findViewById(R.id.post_username);
postImg = itemView.findViewById(R.id.post_image);
}
}
}