zoukankan      html  css  js  c++  java
  • Android中获取网络图片的三种方法

    android中获取网络图片是一件耗时的操作,如果直接获取有可能会出现应用程序无响应(ANR:Application Not Responding)对话框的情况。对于这种情况,一般的方法就是耗时操作用线程来实现。下面列三种获取url图片的方法:
    1.直接获取:(容易:ANR,不建议)

    mImageView = (ImageView)this.findViewById(R.id.imageThreadConcept) ;
    Drawable drawable = loadImageFromNetwork(IMAGE_URL);
    mImageView.setImageDrawable(drawable) ;

    公用方法:

    private Drawable loadImageFromNetwork(String imageUrl)
    {
        Drawable drawable = null;
        try {
            // 可以在这里通过文件名来判断,是否本地有此图片
            drawable = Drawable.createFromStream(
                    new URL(imageUrl).openStream(), "image.jpg");
        } catch (IOException e) {
            Log.d("test", e.getMessage());
        }
        if (drawable == null) {
            Log.d("test", "null drawable");
        } else {
            Log.d("test", "not null drawable");
        }
       
        return drawable ;
    }

    2. 后台线程获取url图片:

    mImageView = (ImageView)this.findViewById(R.id.imageThreadConcept) ;
    new Thread(new Runnable(){
        Drawable drawable = loadImageFromNetwork(IMAGE_URL);
        @Override
        public void run() {
           
            // post() 特别关键,就是到UI主线程去更新图片               
            mImageView.post(new Runnable(){
            @Override
            public void run() {
                // TODO Auto-generated method stub
                mImageView.setImageDrawable(drawable) ;
            }}) ;
            }
           
    }).start()  ;

    3.AsyncTask获取url图片

    mImageView = (ImageView)this.findViewById(R.id.imageThreadConcept) ;
    new DownloadImageTask().execute(IMAGE_URL) ;
    private class DownloadImageTask extends AsyncTask<String, Void, Drawable>
    {
           
            protected Drawable doInBackground(String... urls) {
                return loadImageFromNetwork(urls[0]);
            }

            protected void onPostExecute(Drawable result) {
                mImageView.setImageDrawable(result);
            }
    }

  • 相关阅读:
    DevExpress 最最最基础踩坑(如何设置控件属性)
    Oracle如何创建数据库(使用图形化界面,顺便提一下UTF-8和ZB16GB字符集的问题)
    ElementUI el-dialog中嵌套子页面
    Oracle详细教程(触发器,事务,存储过程,锁,游标)
    和人事交谈下来的几点感悟
    Oracle Groupby分组缺少表达式解决方法
    leetcode973. 最接近原点的 K 个点(谈谈C#中的Icomparer,ComParer,IComparable)
    APP的闪退和无响应
    APP测试的主要内容
    python数据结构
  • 原文地址:https://www.cnblogs.com/AlexCheng/p/2120004.html
Copyright © 2011-2022 走看看