先要进行一个访问网络的权限获取:
<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 请求来检索响应时,服务器返回此代码。 *