我想在我的回收站视图中显示来自 URL 的图片
I want to show a picture from URL in my recyclerview
我有一个从 API 填充的 recyclerview,有一张 URL 我想在图像视图中显示的图片,我尝试了几种方法它给出了网络线程异常,
我的适配器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);
}
});
}
有人知道更简单的方法吗?或任何修复?
使用 HttpURLConnection
加载图像在主线程上加载并停止应用程序的处理或导致 ANR。建议您在后台线程中加载图像。
Glide library 是图像加载库,它可以轻松地为您完成任务。
使用滑动加载图片
implementation 'com.github.bumptech.glide:glide:4.12.0'
示例代码
Glide
.with(myFragment)
.load(url)
.centerCrop()
.placeholder(R.drawable.loading_spinner)
.into(myImageView);
您可以使用 Picasso 库。
android 清单中的权限
<uses-permission android:name="android.permission.INTERNET" />
在应用级别添加 Picasso build.gradle
implementation 'com.squareup.picasso:picasso:2.5.2'
正在加载图片
Picasso.get().load(model.getTrack().getAlbum().getImages().get(position).getUrl()).into(holder.songCover);
我有一个从 API 填充的 recyclerview,有一张 URL 我想在图像视图中显示的图片,我尝试了几种方法它给出了网络线程异常,
我的适配器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);
}
});
}
有人知道更简单的方法吗?或任何修复?
使用 HttpURLConnection
加载图像在主线程上加载并停止应用程序的处理或导致 ANR。建议您在后台线程中加载图像。
Glide library 是图像加载库,它可以轻松地为您完成任务。
使用滑动加载图片
implementation 'com.github.bumptech.glide:glide:4.12.0'
示例代码
Glide
.with(myFragment)
.load(url)
.centerCrop()
.placeholder(R.drawable.loading_spinner)
.into(myImageView);
您可以使用 Picasso 库。
android 清单中的权限
<uses-permission android:name="android.permission.INTERNET" />
在应用级别添加 Picasso build.gradle
implementation 'com.squareup.picasso:picasso:2.5.2'
正在加载图片
Picasso.get().load(model.getTrack().getAlbum().getImages().get(position).getUrl()).into(holder.songCover);