三种基本网络加载图片方式

代码片段(6) [全屏查看所有代码]

1. [代码]普通加载网络方式    

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

public class NormalLoadPictrue {

    

    private String uri;

    private ImageView imageView;

    private byte[] picByte;

    

    

    public void getPicture(String uri,ImageView imageView){

        this.uri = uri;

        this.imageView = imageView;

        new Thread(runnable).start();

    }

    

    @SuppressLint("HandlerLeak")

    Handler handle = new Handler(){

        @Override

        public void handleMessage(Message msg) {

            super.handleMessage(msg);

            if (msg.what == 1) {

                if (picByte != null) {

                    Bitmap bitmap = BitmapFactory.decodeByteArray(picByte, 0, picByte.length);

                    imageView.setImageBitmap(bitmap);

                }

            }

        }

    };

    Runnable runnable = new Runnable() {

        @Override

        public void run() {

            try {

                URL url = new URL(uri);

                HttpURLConnection conn = (HttpURLConnection)url.openConnection();

                conn.setRequestMethod("GET");

                conn.setReadTimeout(10000);

                

                if (conn.getResponseCode() == 200) {

                    InputStream fis =  conn.getInputStream();

                    ByteArrayOutputStream bos = new ByteArrayOutputStream();

                    byte[] bytes = new byte[1024];

                    int length = -1;

                    while ((length = fis.read(bytes)) != -1) {

                        bos.write(bytes, 0, length);

                    }

                    picByte = bos.toByteArray();

                    bos.close();

                    fis.close();

                    

                    Message message = new Message();

                    message.what = 1;

                    handle.sendMessage(message);

                }

                

                

            }catch (IOException e) {

                e.printStackTrace();

            }

        }

    };

    

}

2. [代码]用ImageLoader加载图片    

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

public class ImageLoaderPicture {

    

    private DisplayImageOptions options;

    public ImageLoaderPicture(Context context) {

        

        ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context).threadPriority(Thread.NORM_PRIORITY - 2)

        .denyCacheImageMultipleSizesInMemory()

        .discCacheFileNameGenerator(new Md5FileNameGenerator())

        .tasksProcessingOrder(QueueProcessingType.LIFO).enableLogging()

        .memoryCache(new WeakMemoryCache())                                

        .build();

        ImageLoader.getInstance().init(config);

        

        options = new DisplayImageOptions.Builder()

        .showStubImage(0)

        .showImageForEmptyUri(0)

        .showImageOnFail(0)

        .cacheInMemory().cacheOnDisc()

        .imageScaleType(ImageScaleType.IN_SAMPLE_INT)

        .bitmapConfig(android.graphics.Bitmap.Config.RGB_565)

        .build();

    }

    public DisplayImageOptions getOptions() {

        return options;

    }

    public void setOptions(DisplayImageOptions options) {

        this.options = options;

    }

    

    

}

3. [代码]用Volley加载图片    

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

public class VolleyLoadPicture {

    

    private ImageLoader mImageLoader = null;

    private BitmapCache mBitmapCache;

    

    private ImageListener one_listener;

    

    public VolleyLoadPicture(Context context,ImageView imageView){

        one_listener = ImageLoader.getImageListener(imageView, 0, 0);

        

        RequestQueue mRequestQueue = Volley.newRequestQueue(context);

        mBitmapCache = new BitmapCache();

        mImageLoader = new ImageLoader(mRequestQueue, mBitmapCache);

    }

    public ImageLoader getmImageLoader() {

        return mImageLoader;

    }

    public void setmImageLoader(ImageLoader mImageLoader) {

        this.mImageLoader = mImageLoader;

    }

    public ImageListener getOne_listener() {

        return one_listener;

    }

    public void setOne_listener(ImageListener one_listener) {

        this.one_listener = one_listener;

    }

    

    class BitmapCache implements ImageCache {

        private LruCache<String, Bitmap> mCache;

        private int sizeValue;

        

        public BitmapCache() {

            int maxSize = 10 * 1024 * 1024;

            mCache = new LruCache<String, Bitmap>(maxSize) {

                @Override

                protected int sizeOf(String key, Bitmap value) {

                    sizeValue = value.getRowBytes() * value.getHeight();

                    return sizeValue;

                }

                

            };

        }

        @Override

        public Bitmap getBitmap(String url) {

            return mCache.get(url);

        }

        @Override

        public void putBitmap(String url, Bitmap bitmap) {

            mCache.put(url, bitmap);

        }

    }

    

}

4. [代码]Activity    

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

public class MainActivity extends Activity {

    

    private ImageView imageView001,imageView002,imageView003;

    

    public static final String picUrl = "http://img.quwenjiemi.com/2014/0701/thumb_420_234_20140701112917406.jpg";

    //public static final String picUrl = "http://192.168.1.181:8081/AndroidSerivces/house.jpg";

    

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        imageView001 = (ImageView)findViewById(R.id.imageView001);

        imageView002 = (ImageView)findViewById(R.id.imageView002);

        imageView003 = (ImageView)findViewById(R.id.imageView003);

        

        //用普通方法加载图片

        new NormalLoadPictrue().getPicture(picUrl,imageView001);

        

        //用ImageLoader加载图片

        ImageLoader.getInstance().displayImage(picUrl, imageView002,new ImageLoaderPicture(this).getOptions(),new SimpleImageLoadingListener());

        

        //用Volley加载图片

        VolleyLoadPicture vlp = new VolleyLoadPicture(this, imageView003);

        vlp.getmImageLoader().get(picUrl, vlp.getOne_listener());

    }

    

}

5. [代码]布局文件    

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"

    xmlns:tools="http://schemas.android.com/tools"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    tools:context=".MainActivity" >

    <RelativeLayout

        android:layout_width="match_parent"

        android:layout_height="match_parent"

        android:padding="10dp">

    

    <TextView

        android:id="@+id/textView001"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:text="1.用普通方法的加载图片"/>

    

    <ImageView

        android:id="@+id/imageView001"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:layout_below="@+id/textView001"/>

    

    

    <TextView

        android:id="@+id/textView002"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:layout_below="@+id/imageView001"

         android:text="2.用Android-Universal-Image-Loader加载图片"/>

    

    <ImageView

        android:id="@+id/imageView002"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

         android:layout_below="@+id/textView002"/>

    

    

    <TextView

        android:id="@+id/textView003"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:layout_below="@+id/imageView002"

         android:text="3.用Volley加载图片"/>

    

    <ImageView

        android:id="@+id/imageView003"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

         android:layout_below="@+id/textView003"/>

    

    </RelativeLayout>

</ScrollView>

6. [文件] 三种基本网络加载图片方式.rar ~ 2MB     下载(890)

时间: 2024-10-12 16:55:19

三种基本网络加载图片方式的相关文章

Android三种基本的加载网络图片方式(转)

Android三种基本的加载网络图片方式,包括普通加载网络方式.用ImageLoader加载图片.用Volley加载图片. 1. [代码]普通加载网络方式 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60

网络多线程 ---实现网络加载图片

案例要求:网络加载图片,随机加载到设置好的视图上 实现的效果图如下: 具体代码如下: // //  ViewController.m //  0603---NSOperationQueue #import "ViewController.h" @interface ViewController () @property (nonatomic,strong) NSMutableArray * imageArray; @end @implementation ViewController

Android异步加载学习笔记之四:利用缓存优化网络加载图片及ListView加载优化

如果不做任何处理,直接用网络加载图片在网速快的情况下可能没什么不好的感觉,但是如果使用移动流量或是网络不好的时候,问题就来了,要么用户会抱怨流量使用太多,要么抱怨图片加载太慢,如论从哪个角度出发,都不是好的体验!要提高用户体验,我们就要使用缓存.Android中数据缓存的方式有很多,相关介绍的文章也比较多,比如http://blog.csdn.net/dahuaishu2010_/article/details/17093139和http://www.jb51.net/article/38162

React Native Image多种加载图片方式

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica } p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px "PingFang SC" } p.p3 { margin: 0.0px 0.0px 0.0px 0.0px; line-height: 18.0px; font: 12.0px Menlo; color: #608b4e; background-col

【iOS】网络加载图片缓存与SDWebImage

加载网络图片可以说是网络应用中必备的.如果单纯的去下载图片,而不去做多线程.缓存等技术去优化,加载图片时的效果与用户体验就会很差. 一.自己实现加载图片的方法 tips: *iOS中所有网络访问都是异步的.(自己开线程去下载) *普通为模型增加UIImage属性的方法做的是内存缓存(下次启动还需要从网络重新加载), 而要做本地缓存的话,还要自己手动存储网络上下载的图片. *为了加快访问, 还需要自己去弄缓存.(内存缓存或者本地缓存) *当图片没有下载完成时,还要设置占位图片. 以下代码用NSOp

android三种加载图片方式

package smalt.music.utils; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.BitmapFactory.Options; //载入图片的方法:3种 public class BitmapUntil { // 直接加载图片 public static Bitmap getBitmap(String path) { Bitmap bt

android 网络加载图片,对图片资源进行优化,并且实现内存双缓存 + 磁盘缓存

经常会用到 网络文件 比如查看大图片数据 资源优化的问题,当然用开源的项目  Android-Universal-Image-Loader  或者 ignition 都是个很好的选择. 在这里把原来 写过的优化的代码直接拿出来,经过测试千张图片效果还是不错的. 免费培训课:http://www.jinhusns.com/Products/Curriculum/?type=xcj 工程目录 至于 Activity 就是加载了 1个网格布局 01./** 02.*   实现 异步加载 和   2级缓

iOS网络加载图片缓存策略之ASIDownloadCache缓存优化

在我们实际工程中,很多情况需要从网络上加载图片,然后将图片在imageview中显示出来,但每次都要从网络上请求,会严重影响用户体验,为了不是每次显示都需要从网上下载数据,希望将图片放到本地缓存,因此我们需要一个好的的缓存策略,今天我将我在项目工程中的实际经验分享给大家,我这里主要介绍一下强大的ASIHTTPRequest的缓存策略,以及使用方法. AD: 在我们实际工程中,很多情况需要从网络上加载图片,然后将图片在imageview中显示出来,但每次都要从网络上请求,会严重影响用户体验,为了不

iOS网络加载图片缓存与SDWebImage

加载网络图片可以说是网络应用中必备的.如果单纯的去下载图片,而不去做多线程.缓存等技术去优化,加载图片时的效果与用户体验就会很差. 一.自己实现加载图片的方法 tips: *iOS中所有网络访问都是异步的.(自己开线程去下载) *普通为模型增加UIImage属性的方法做的是内存缓存(下次启动还需要从网络重新加载), 而要做本地缓存的话,还要自己手动存储网络上下载的图片. *为了加快访问, 还需要自己去弄缓存.(内存缓存或者本地缓存) *当图片没有下载完成时,还要设置占位图片. 以下代码用NSOp