AysncTask实现异步下载图片
2016-09-18 17:04
295 查看
目录:
1.概述
2.异步下载图片代码实现
1.概述:
除了通过handler+Thread实现异步访问网络实现更新UI之外,还可以通过AsyncTask实现,至于他们的应用场景和各自的优缺点
在之前写过一篇关于handler+Thread异步下载图片中有讲解,地址:http://blog.csdn.net/qq_28057577/article/details/52496025
这里就不重复了。
2.异步下载图片代码实现
2.1 效果图
2.2 主布局activity_async.xml
2.3 主布局类AyncMainActivity.java
2.4 实现异步访问下载的类DownloadAsyncTask.java
1.概述
2.异步下载图片代码实现
1.概述:
除了通过handler+Thread实现异步访问网络实现更新UI之外,还可以通过AsyncTask实现,至于他们的应用场景和各自的优缺点
在之前写过一篇关于handler+Thread异步下载图片中有讲解,地址:http://blog.csdn.net/qq_28057577/article/details/52496025
这里就不重复了。
2.异步下载图片代码实现
2.1 效果图
2.2 主布局activity_async.xml
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/imageView2" /> <Button android:layout_below="@+id/imageView2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="AnyscTask异步获取图片" android:id="@+id/button2" /> </RelativeLayout>
2.3 主布局类AyncMainActivity.java
package com.example.com.example.async; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.Button; import android.widget.ImageView; import com.example.R; /** * Created by elimy on 2016-09-09. */ public class AsyncMainActivity extends AppCompatActivity { private ImageView imageView2; private Button button2; private DownloadAsyncTask mAsyncTask; private String image_url = "https://photo.tuchong.com/1447577/g/9211949.jpg"; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_anysc); //初始化控件 imageView2 = (ImageView) findViewById(R.id.imageView2); button2 = (Button) findViewById(R.id.button2); //设置监听器 button2.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //初始化自定义AsyncTask类实例 mAsyncTask = new DownloadAsyncTask(imageView2,AsyncMainActivity.this); //传入图片地址,执行异步获取图片操作 mAsyncTask.execute(image_url); } }); } }
2.4 实现异步访问下载的类DownloadAsyncTask.java
package com.example.com.example.async; import android.app.ProgressDialog; import android.content.Context; import android.content.DialogInterface; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.AsyncTask; import android.util.Log; import android.widget.ImageView; import android.widget.Toast; import java.io.IOException; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; /** * Created by elimy on 2016-09-09. * 参数:<Params, Progress, Result> * String:表示传入参数的数据类型 * Integer:表示更新进度值得数据类型 * Bitmap:表示返回值的数据类型 * 如果没有传入参数可设置为Void类型 */ public class DownloadAsyncTask extends AsyncTask<String,Integer,Bitmap> { private ImageView imageView; private Context context; private Bitmap bitmap; private ProgressDialog progressDialog; public DownloadAsyncTask(ImageView imageview,Context context) { this.imageView = imageview; this.context = context; } /* * 线程执行最开始时候调用,在UI线程中执行 * 一般执行一些预操作比如显示进度条 * */ @Override protected void onPreExecute() { progressDialog = new ProgressDialog(context); progressDialog.setTitle("加载图片"); progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); progressDialog.setMessage("图片加载中,请稍后..."); //设置可以按back键返回 progressDialog.setCancelable(true); progressDialog.setButton(DialogInterface.BUTTON_NEGATIVE, "取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.cancel(); } }); //弹出progressDialog并设置进度值为0 progressDialog.show(); progressDialog.setProgress(0); imageView.setImageBitmap(null); super.onPreExecute(); } /* * 在onPreExecute方法调用后立即调用,用来执行一些耗时的后台操作 * */ @Override protected Bitmap doInBackground(String... params) { try { //调用onProgressUpdate更新一次进度条 publishProgress(0); //创建URL类并初始化 URL url = new URL(params[0]); //获取链接对象 HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); //设置请求方式 urlConnection.setRequestMethod("GET"); //设置允许接收输入 urlConnection.setDoInput(true); //设置超时 urlConnection.setConnectTimeout(5*1000); //暂停5s模拟请求耗时,方便观察进度条 try { Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } publishProgress(50); //在此更新一次进度条 if (urlConnection.getResponseCode() == 200){ //获取响应输入数据 InputStream is = urlConnection.getInputStream(); //将响应数据转换成位图类型 bitmap = BitmapFactory.decodeStream(is); publishProgress(100); }else { Log.d("request","请求失败"); } } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return bitmap; } /* * 在后台操作结束后接收返回结果,在UI线程中调用 * */ @Override protected void onPostExecute(Bitmap bitmap) { if (bitmap != null) { //设置图片到UI显示 imageView.setImageBitmap(bitmap); Toast.makeText(context,"获取图片成功",Toast.LENGTH_SHORT).show(); }else { Toast.makeText(context,"获取图片失败",Toast.LENGTH_SHORT).show(); } } /* * 更新进度,调用publishProgress之后被调用 * */ @Override protected void onProgressUpdate(Integer... values) { //更新进度条 progressDialog.setProgress(values[0]); //cancel掉进度条弹框 if (progressDialog.getProgress() == 100){ progressDialog.cancel(); } super.onProgressUpdate(values); } /* * 取消异步线程,当UI线程调用AsyncTask的cancel方法时调用,在UI线程中运行 * 比如这里如果在加载图片的过程中用户不想加载了,点击了取消加载图片(假如加载有点 * 缓慢)这个时候就会触发UI线程的cancel方法从而调用此方法,做一些善后的处理 * * */ @Override protected void onCancelled(Bitmap bitmap) { //cancel掉弹框 progressDialog.cancel(); super.onCancelled(bitmap); } }
相关文章推荐
- ListView通过自定义的Adapter实现异步下载显示网络图片
- 利用LruCache和DiskLruCache实现图片异步下载
- ios异步登录,登录的是php写服务器,同理可以实现文件图片下载
- Android - 异步下载图片的简单实现
- 安卓中异步任务实现带下载进度的根据图片地址下载图片
- iOS学习笔记---利用NSThread实现异步更新UI和下载图片
- Android:ListView异步加载图片(实现网络下载、存储本地、缓存内存、压缩显示)
- Android使用缓存机制实现文件下载及异步请求图片加三级缓存
- Android:AysncTask异步加载
- asp.net+jquery.form实现图片异步上传的方法(附jquery.form.js下载)
- 异步处理任务工具类(AsyncTask)实现多张图片的下载(已知url)
- asp.net+jquery.form实现图片异步上传的方法(附jquery.form.js下载)
- 实现异步下载网络图片
- 基于iOS 使用GCD实现列表界面的图片异步下载
- ListView通过自定义的Adapter实现异步下载显示网络图片
- OkHttp学习(2)-->>异步下载图片、文件(拦截器重写Response方法实现下载进度获取)
- ListView异步下载图片的另一种实现
- 用php实现的下载css文件中的图片的代码
- Flash图片新闻的实现方法及源码下载
- 简单实现异步下载