Reputation: 298
I don't know what makes this but no image is showing any images. Please help me to rectify the issue.
My Adapter class:
public class Images_Adapter extends RecyclerView.Adapter<Images_Adapter.ViewHolder> {
private List<Images_Item> items;
private int itemLayout;
public Images_Adapter(List<Images_Item> items, int itemLayout) {
this.items = items;
this.itemLayout = itemLayout;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(itemLayout, parent, false);
return new ViewHolder(v);
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
Images_Item item = items.get(position);
Glide.with(holder.image.getContext())
.load(item.getImageURL())
.into(holder.image);
}
@Override
public int getItemCount() {
return items.size();
}
static class ViewHolder extends RecyclerView.ViewHolder {
ImageView image;
ViewHolder(View itemView) {
super(itemView);
image = itemView.findViewById(R.id.ImageItem);
}
}
}
My Images_Item Class:
class Images_Item {
private String imageURL;
String getImageURL() {
return imageURL;
}
Images_Item(String string) {
}
}
My Activity Class:
public class Events_and_Participations extends AppCompatActivity {
StorageReference reference;
RecyclerView recyclerView;
Images_Adapter adapter;
FirebaseAuth auth;
Button button;
FirebaseUser user;
List<Images_Item> items = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_events_and_participations);
user = FirebaseAuth.getInstance().getCurrentUser();
reference = FirebaseStorage.getInstance().getReference("images");
if (user != null){
reference.listAll()
.addOnSuccessListener(listResult -> {
for (StorageReference item : listResult.getItems()) {
item.getDownloadUrl().addOnCompleteListener(task -> {
items.add(new Images_Item(task.getResult().toString()));
});
}
})
.addOnFailureListener(e -> Toast.makeText(Events_and_Participations.this, e.getMessage(), Toast.LENGTH_SHORT).show());
}
adapter = new Images_Adapter(items, R.layout.item_events_image);
recyclerView = findViewById(R.id.events_photos);
recyclerView.setAdapter(adapter);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
recyclerView.setItemAnimator(new DefaultItemAnimator());
}
}
It just shows an empty screen even it throws no errors. I'm getting the links properly but it won't shows the images. No Log cat shows and no images are displayed.
Upvotes: 1
Views: 171
Reputation: 71
you didnt set imageUrl:
class Images_Item {
private String imageURL;
String getImageURL() {
return imageURL;
}
Images_Item(String string) {
this.imageURL = string;
}
Upvotes: 0
Reputation: 40830
A couple of issues that you can work on:
First, you didn't add a valid layout path in onCreateViewHolder
, which should include R.layout.xx
, replace xx
with your item layout name.
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.xx, parent, false);
return new ViewHolder(v);
}
Second, your Firebase items take time until they are received as it works in a background thread, so you need to do something like adapter.notifiyDataSetChanged()
upon receiving the items, or set the adapter instead
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_events_and_participations);
user = FirebaseAuth.getInstance().getCurrentUser();
reference = FirebaseStorage.getInstance().getReference("images");
recyclerView = findViewById(R.id.events_photos);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
recyclerView.setItemAnimator(new DefaultItemAnimator());
if (user != null){
reference.listAll()
.addOnSuccessListener(listResult -> {
for (StorageReference item : listResult.getItems()) {
item.getDownloadUrl().addOnCompleteListener(task -> {
items.add(new Images_Item(task.getResult().toString()));
});
}
adapter = new Images_Adapter(items, R.layout.item_events_image);
recyclerView.setAdapter(adapter);
})
.addOnFailureListener(e -> Toast.makeText(Events_and_Participations.this, e.getMessage(), Toast.LENGTH_SHORT).show());
}
}
Finally, you didn't set the imageURL
attribute in the construcotr with the images URLs, so do that in the constructor.
class Images_Item {
private String imageURL;
String getImageURL() {
return imageURL;
}
Images_Item(String string) {
imageURL = string; //<<<<<<<<<<<<< here is the change
}
}
Upvotes: 1
Reputation: 471
ImageUrl is never initialized hence it is always null.
class Images_Item {
private String imageURL;
String getImageURL() {
return imageURL;
}
Images_Item(String string) {
this.imageURL = string;
}
}
Upvotes: 2