Home > database >  I want to show a picture from URL in my recyclerview
I want to show a picture from URL in my recyclerview

Time:09-23

I have a recyclerview which I populate from an API , there is a URL of a picture I want to show in my imageview, I tried few methods it gives Network Thread exception,

My Adapter Class,

 @Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
    ItemPayload model = list.get(position);
    Log.d("aaa",model.getTrack().getName().toString());

    String image = model.getTrack().getAlbum().getImages().get(position).getUrl();
    URL newurl = null;
    try {
        newurl = new URL(image);
    } catch (MalformedURLException e) {
        e.printStackTrace();
    }
    Bitmap mIcon_val = null;
    try {
        HttpURLConnection conn= (HttpURLConnection)newurl.openConnection();
        conn.setDoInput(true);
        conn.connect();
        int length = conn.getContentLength();
        int[] bitmapData =new int[length];
        byte[] bitmapData2 =new byte[length];
        InputStream is = conn.getInputStream();
        BitmapFactory.Options options = new BitmapFactory.Options();

        mIcon_val = BitmapFactory.decodeStream(is,null,options);

        holder.songCover.setImageBitmap(mIcon_val);
        
    } catch (IOException e) {
        e.printStackTrace();
    }



    holder.textSong.setText(model.getTrack().getName());
    holder.textArtist.setText(model.getTrack().getArtists().get(0).getName());
    holder.textTrack.setText(model.getTrack().getAlbum().getTotal_tracks().toString());
    String url = model.getTrack().getExternal_urls().getSpotify();
    holder.textSong.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent viewIntent =
                    new Intent("android.intent.action.VIEW", Uri.parse(url));
            viewIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            context.startActivity(viewIntent);
        }
    });

}

Does Anyone know a easier way to do it? or any fixes?

CodePudding user response:

Loading images using HttpURLConnection load on main thread and stops the processing of the app or causes ANR. It's recommended you load images in background thread.
Glide library is image loading library which does the tasks easily for you.

Use glide to load the images

  implementation 'com.github.bumptech.glide:glide:4.12.0'

Sample Code

 Glide
    .with(myFragment)
    .load(url)
    .centerCrop()
    .placeholder(R.drawable.loading_spinner)
    .into(myImageView);

CodePudding user response:

You can use Picasso library for the same.

Permission in android manifest

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

Add Picasso in app level build.gradle

implementation 'com.squareup.picasso:picasso:2.5.2'

Loading image

Picasso.get().load(model.getTrack().getAlbum().getImages().get(position).getUrl()).into(holder.songCover);
  • Related