使用AsyncTask下载图片

先要进行一个访问网络的权限获取:

<uses-permission android:name="android.permission.INTERNET"/></span>

1.声明基础组件:分别为一个按钮进行启动下载操作,一个图片资源,一个下载图片的路径,一个进程对话框

 private Button button;
 private ImageView imageView;
 private final String IMAGE_PATH="https://ss0.bdstatic.com/5aV1bjqh_Q23odCf/static/superman/img/logo/bd_logo1_31bdc765.png";
 private ProgressDialog progressDialog;

 
2.进行对话框的捕捉及设置其显示的内容: 

progressDialog=new ProgressDialog(this);
progressDialog.setTitle("提示");
progressDialog.setCancelable(false);//注意这里一定要选为用户不可取消的,这样的话可以保证对话框一直悬浮
progressDialog.setMessage("正在下载");</span>
3.按钮和图片显示框的捕获:

button=(Button)findViewById(R.id.button);
imageView=(ImageView)findViewById(R.id.imageView);</span>
4.声明一个异步任务类:

public class MyTesk extends AsyncTask<String,Integer,byte[]>
    {
        //进行预操作,显示对话框
        protected void onPreExecute(){
            super.onPreExecute();
            progressDialog.show();
        }
        //这是异步任务核心部分,需要进行重写
        @Override
        protected byte[] doInBackground(String... params) {
            //创建HttpClient对象,这里创建的是默认客户端实例
            HttpClient httpClient=new DefaultHttpClient();
            //这里需要进行一个Get请求因此还需要一个HttpGet对象
            HttpGet httpGet=new HttpGet(params[0]);
            byte[] result=null;
            try
            {
                //创建响应对象
                HttpResponse httpResponse=httpClient.execute(httpGet);
                //这里需要查看响应对象的返回值是否为200,如果不是则访问错误
                if(httpResponse.getStatusLine().getStatusCode()==200)
                {
                    /*
                    * EntityUtils对象是org.apache.http.util下的一个工具类,用官方的解释是为HttpEntity对象提供的静态帮助类,其常用的几个方法如下:
                      consume()方法;关闭HttpEntity是的流,如果手动关闭了InputStream instream = entity.getContent();这个流,也可以不调用这个方法。
                      consumeQuietly(HttpEntity)方法
                      toByteArray(final HttpEntity entity)方法
                    * */
                    //这里返回一个数据流
                    result= EntityUtils.toByteArray(httpResponse.getEntity());
                }
            }catch (Exception e)
            {
                e.printStackTrace();
            }
            return result;
        }

        protected void onPostExecute(byte[] result)
        {
            super.onPostExecute(result);
            //使用位图的解码工具BitmapFactory.decodeByteArray解析传回的result
            Bitmap bitmap= BitmapFactory.decodeByteArray(result,0,result.length);
            //显示图片
            imageView.setImageBitmap(bitmap);
            //关闭对话框
            progressDialog.dismiss();
        }
    }
</span>
5.设置按钮的点击事件来启动AsyncTask:

button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                new MyTesk().execute(IMAGE_PATH);
            }
        });
</span>
6.这里简述一下http状态返回代码

* 1xx(临时响应)表示临时响应并需要请求者继续执行操作的状态代码。
* 100   (继续) 请求者应当继续提出请求。 服务器返回此代码表示已收到请求的第一部分,正在等待其余部分。
* 101   (切换协议) 请求者已要求服务器切换协议,服务器已确认并准备切换。http状态返回代码
* 2xx   (成功)表示成功处理了请求的状态代码。
* 200   (成功)  服务器已成功处理了请求。 通常,这表示服务器提供了请求的网页。
* 201   (已创建)  请求成功并且服务器创建了新的资源。
* 202   (已接受)  服务器已接受请求,但尚未处理。
* 203   (非授权信息)  服务器已成功处理了请求,但返回的信息可能来自另一来源。
* 204   (无内容)  服务器成功处理了请求,但没有返回任何内容。
* 205   (重置内容) 服务器成功处理了请求,但没有返回任何内容。
* 206   (部分内容)  服务器成功处理了部分 GET 请求。http状态返回代码
* 3xx  (重定向)表示要完成请求,需要进一步操作。 通常,这些状态代码用来重定向。
* 300   (多种选择)  针对请求,服务器可执行多种操作。 服务器可根据请求者 (user agent) 选择一项操作,或提供操作列表供请求者选择。
* 301   (永久移动)  请求的网页已永久移动到新位置。 服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置。
* 302   (临时移动)  服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。
* 303   (查看其他位置) 请求者应当对不同的位置使用单独的 GET 请求来检索响应时,服务器返回此代码。
*







  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值