Search code examples
androidandroid-recyclerviewpicasso

Images are not displaying in RecyclerView


I have implemented a RecyclerView with backend node.js mysql and I have already set a folder for images. In android, the RecyclerView works fine but when I have decided to work with dynamic images from url, they are not displating in RecyclerView, I am reading from a JSON.

{
  "location_id": 3,
  "datelocation": "15/10/2020 15:11",
  "adresselocation": "Klibia",
  "bike_id": 3,
  "user_id": 10,
  "model": "Skygrey",
  "type": "RTT",
  "price": "55",
  "image": "http://localhost:3000/bike2.png"
}

I had set my adapter like this:

public class BikesAdapter extends RecyclerView.Adapter<BikesAdapter.BikesViewHolder> {

    private final ArrayList<Bike> bikes;
    private Context mContext;
    private Callback mCallback;

    public BikesAdapter(Context mContext, ArrayList<Bike> bikes) {
        this.mContext = mContext;
        this.bikes = bikes;
    }

    @NonNull
    @Override
    public BikesAdapter.BikesViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View mItemView = LayoutInflater.from(mContext).inflate(R.layout.bike_list_item, parent, false);
        return new BikesViewHolder(mItemView, this);
    }

    @Override
    public void onBindViewHolder(@NonNull BikesAdapter.BikesViewHolder holder, int position) {
        final Bike singleItem = bikes.get(position);

        holder.BikeName.setText(singleItem.getModel());

        Picasso.with(mContext).load(singleItem.getImage()).resize(50, 50).into(holder.BikeImage);

        holder.bikeView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mCallback.onItemClicked(singleItem);
            }
        });
        holder.BikeImage.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(mContext, singleItem.getModel(), Toast.LENGTH_SHORT).show();
            }
        });
    }

    @Override
    public int getItemCount() {
        return bikes.size();
    }

    public class BikesViewHolder extends RecyclerView.ViewHolder {

        public final TextView BikeName;
        public final ImageView BikeImage;
        public final Button bikeView;
        final BikesAdapter mAdapter;

        public BikesViewHolder(@NonNull View itemView, BikesAdapter mAdapter) {
            super(itemView);
            this.BikeName = itemView.findViewById(R.id.bikeName);
            this.BikeImage = itemView.findViewById(R.id.bikeImage);
            this.bikeView = itemView.findViewById(R.id.btn_view);
            this.mAdapter = mAdapter;
        }
    }
    
    public void setCallback(Callback callback) {
        mCallback = callback;
    }

    public interface Callback {
        void onItemClicked(Bike bike);
    }
}

What is wrong here? Why the images are not showing in my RecyclerView? I tried with Picasso like you see in BikeAdapter under onBindViewHolder() method, what I am missing I do not understand!


Solution

  • First of all the way we call Picasso has changed.

    Picasso.get().load("imageUrl").into(imageView);
    

    Also check if you have internet permission in your manifest

    <uses-permission android:name="android.permission.INTERNET"/>
    

    Finally try to turn on Picasso logs to see if there is an error there

    Picasso.get().setLoggingEnabled(true)
    

    Just in case be sure that your image url loads properly on a browser.