iOS 异步加载图片 使用EGOImageView、SDWebImage按步骤使用的,就是不能显示图片

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS 异步加载图片 使用EGOImageView、SDWebImage按步骤使用的,就是不能显示图片相关的知识,希望对你有一定的参考价值。

EGOImageView *egoView = [[EGOImageView alloc]initWithPlaceholderImage:[UIImage imageNamed:@"user_head_img"]];

egoView.frame = CGRectMake(10 + 100 * x, 10 + 100 * y, 90, 90);

egoView.imageURL = [NSURL URLWithString:imagePath];
[self.scrollView addSubview:egoView];
//
UIImageView *imgView = [[UIImageView alloc]initWithFrame:CGRectMake(10 + 100 * x, 10 + 100 * y, 90, 90)];

[imgView setImageWithURL:[NSURL URLWithString:imagePath] placeholderImage:[UIImage imageNamed:@"user_head_img"]];
[self.scrollView addSubview:imgView];
//这两段代码都不行!!!
当我用UIWebView时,就可以正常使用,但是,这不是异步加载呀!
UIWebView *imageView = [[UIWebView alloc]init];

imageView.scalesPageToFit=YES;

NSURL *contentViewUrl = [NSURL URLWithString:imagePath];

NSURLRequest *request = [NSURLRequest requestWithURL:contentViewUrl];

[imageView loadRequest:request];

imageView.frame = CGRectMake(10 + 100 * x, 10 + 100 * y, 90, 90);

参考技术A 用多线程可以实现。本回答被提问者采纳

Android-异步加载图片

刚刚复习了之前学的异步加载图片,于是决定写下来,增强记忆

  想要加载图片,必须获得所有图片的URL地址。这里图片的URL地址存在了List数组。

  异步加载图片有两种方式(我这里使用两种方式):1.自己开线程来加载图片,然后使用Handler来更新UI;2.使用AsyncTask来加载图片。

1.使用子线程来加载图片。

 

 1 private Handler handler = new Handler()
 2     {
 3         @Override
 4         public void handleMessage(Message msg) {
 5             if(mImageView.getTag().equals(mUrlString))
 6             {
 7                 mImageView.setImageBitmap(mBitmap);
 8             }
 9         }
10     };
11     public  void loadImageByThread(ImageView imageView, final String urlString) {
12         mImageView = imageView;
13         mUrlString = urlString;
14         new Thread() {
15             @Override
16             public void run() {
17                 mBitmap = getBitmap(mUrlString);
18                 Message message = Message.obtain();
19                 message.obj = urlString;
20                 handler.sendMessage(message);
21             }
22         }.start();
23     }
 1 private  Bitmap getBitmap(String urlString)
 2     {
 3         Bitmap bitmap = null;
 4 
 5         URL url = null;
 6         HttpURLConnection httpURLConnection = null;
 7         InputStream is = null;
 8         try {
 9             url = new URL(urlString);
10             httpURLConnection = (HttpURLConnection) url.openConnection();
11             is = httpURLConnection.getInputStream();
12             bitmap = BitmapFactory.decodeStream(is);
13         } catch (MalformedURLException e) {
14             e.printStackTrace();
15         } catch (IOException e) {
16             e.printStackTrace();
17         }
18         finally {
19             try {
20                 is.close();
21             } catch (IOException e) {
22                 e.printStackTrace();
23             }
24         }
25         return bitmap;
26     }

2.使用AsyncTask来加载图片

 1 private class MyAsyncTask extends AsyncTask<String, Void, Bitmap>
 2     {
 3 
 4         protected Bitmap doInBackground(String... params) {
 5             return getBitmap(params[0]);
 6         }
 7 
 8         @Override
 9         protected void onPostExecute(Bitmap bitmap) {
10 
11             if(mImageView != null && bitmap != null && mUrlString.equals(mImageView.getTag()))
12             {
13                 mImageView.setImageBitmap(bitmap);
14                 Utils.addBitmapToLruCache(bitmap, mUrlString);
15             }
16         }
17     }

3.使用内存来缓存图片

 1     private static long mMaxMemory = Runtime.getRuntime().maxMemory();
 2     private static long mApplyMemory = mMaxMemory / 10;
 3     private static LruCache<String, Bitmap> mLruCache = new LruCache<String, Bitmap>((int)mApplyMemory)
 4     {
 5         @Override
 6         protected int sizeOf(String key, Bitmap value) {
 7             return value.getByteCount();
 8         }
 9     };
10     public static boolean isBitmapExistsInLruCache(String urlString)
11     {
12         return mLruCache.get(urlString) != null;
13     }
14     public static void addBitmapToLruCache(Bitmap bitmap, String urlString)
15     {
16         //Log.i("main", "图片大小 = " + bitmap.getByteCount()  * 1.0f/ 1024 / 1024);
17         mLruCache.put(urlString, bitmap);
18     }
19     public static Bitmap getBitmaoLruCache(String urlString)
20     {
21         return  mLruCache.get(urlString);
22     }

 

以上是关于iOS 异步加载图片 使用EGOImageView、SDWebImage按步骤使用的,就是不能显示图片的主要内容,如果未能解决你的问题,请参考以下文章

iOS 异步图片加载优化与常用开源库分析

iOS14 Widget小组件开发实践5——网络图片的加载

swift--使用URLSession异步加载图片

android 安卓异步加载网络图片,与viewpager结合使用示例

多线程异步加载图片

iOS - 在 AFNetworking 异步图像下载线程完成后重新加载 UITableView