Java 使用asynctask for RecyclerView在android中下载图像
这是我下面的Java 使用asynctask for RecyclerView在android中下载图像,java,android,android-asynctask,android-recyclerview,Java,Android,Android Asynctask,Android Recyclerview,这是我下面的AsyncTask类代码,用于下载RecyclerView的图像 public class MyDownloadImageAsyncTask extends AsyncTask<String, Void,Bitmap> { private final WeakReference<ImageView> imageViewReference; public MyDownloadImageAsyncTask(ImageView imv) {
AsyncTask
类代码,用于下载RecyclerView
的图像
public class MyDownloadImageAsyncTask extends AsyncTask<String, Void,Bitmap> {
private final WeakReference<ImageView> imageViewReference;
public MyDownloadImageAsyncTask(ImageView imv) {
imageViewReference = new WeakReference<ImageView>(imv);
}
@Override
protected Bitmap doInBackground(String... urls) {
Bitmap bitmap = null;
for (String url : urls) {
bitmap = MyUtility.downloadImage(url);
/*if (bitmap != null) {
mImgMemoryCache.put(url, bitmap);
}*/
}
return bitmap;
}
protected void onPostExecute(Bitmap bitmap){
if (imageViewReference != null && bitmap != null) {
final ImageView imageView = imageViewReference.get();
if (imageView != null) {
imageView.setImageBitmap(bitmap);
}
}
}
}
每次我运行应用程序时,它都会崩溃。用于下载图像的URL位于ArrayList
中
我猜我在调用异步任务时犯了一个错误,但我想不出解决方案。改变这个
public MyDownloadImageAsyncTask(ImageView imv) {
imageViewReference = new WeakReference(imv);
}
对此
public MyDownloadImageAsyncTask(ImageView imv) {
imageViewReference = new WeakReference<ImageView>(imv);
}
分别用于每个URL
如果有帮助的话,试试这个。改变这个
public MyDownloadImageAsyncTask(ImageView imv) {
imageViewReference = new WeakReference(imv);
}
对此
public MyDownloadImageAsyncTask(ImageView imv) {
imageViewReference = new WeakReference<ImageView>(imv);
}
分别用于每个URL
如果有帮助,请尝试此方法。考虑使用将图像下载到您的imageView中……我使用的解决Android中图像细微差别的方法非常简单,如果您希望人们帮助诊断您的问题,您需要发布崩溃消息。或者,看看毕加索,就像约格什建议的那样。这种崩溃很奇怪,因为一旦应用程序崩溃,我的日志就会被删除。在没有看到LogCAT之前从来没有这个问题我们无法检测到问题…考虑使用下载图像到你的IVIEVIEW…这么多的EasieRi用来解决安卓的图像细微差别你需要发布崩溃如果你想帮助人们诊断你的问题。或者,看看毕加索,就像约格什建议的那样。这种崩溃很奇怪,因为一旦应用程序崩溃,我的日志就会被删除。以前从未出现过此问题,如果没有看到logcat,我们无法检测到此问题…这不是问题的原因。类型擦除意味着您的两个代码段在运行时意味着相同的事情。我已经按照您所说的更改了代码,但没有任何进展。非常感谢Neal。你是一个救世主,还有一个帮助。我应该在哪里添加LruCache代码?标记接受的答案,如果有帮助,请向上投票。这不会导致问题。类型擦除意味着您的两个代码段在运行时意味着相同的事情。我已经按照您所说的更改了代码,但没有任何进展。非常感谢Neal。你是救世主,还有一个帮助。我应该在哪里添加LruCache代码?请标记接受的答案,如果有帮助,请向上投票。
new LoadImage(holder.itemImage).execute(IMAGE_URL);