通过AsyncTask下载网络图片
2017-09-01 19:52
375 查看
AsyncTask本身是一个抽象类,如果要实现自己的AsyncTask,需要继承AsyncTask并定义自己的实现类。注意AsyncTask有三个泛型参数:
**这三个参数应该是引用类型,包括类、接口、数组。但不能是基本数据类型(可以考虑使用包装类来代替)。
这三个泛型参数描述如下:**
⦁ Params:传入异步任务中参数的类型
⦁ Progress:异步任务运行过程中,返回的中间值的类型。
⦁ Result:异步任务返回值的类型
如果定义了自己的异步任务,一般需要实现3个方法。
⦁ onPreExecute():异步任务执行前的准备工作
⦁ doInBackground():在后台执行异步任务。只有该方法在子线程中执行
⦁ onPostExecute():异步任务执行后的收尾工作
好了,下面是正文咯
1 如果需要网络,需要在AndroidManifest.xml中添加权限:
2.布局文件代码,这里咱们写了一个ImageView和Button控件:
3.创建HttpUtils类做为工具类:
4.创建一个异步任务类MyTask,并让他继承 AsyncTasK < Params, Progress, Result>,并重写doInBackground(),onPostExecute()方法:
5.最后的是MainActivity.java:
以上就是通过AsyncTask下载网络图片的代码就这些了,咱们这里就不贴上运行后的效果图了哈。
谢谢大家阅读,本文仅供参考,有疑问或错误请大家指出,谢谢。
public abstract class AsyncTask<Params, Progress, Result>
**这三个参数应该是引用类型,包括类、接口、数组。但不能是基本数据类型(可以考虑使用包装类来代替)。
这三个泛型参数描述如下:**
⦁ Params:传入异步任务中参数的类型
⦁ Progress:异步任务运行过程中,返回的中间值的类型。
⦁ Result:异步任务返回值的类型
如果定义了自己的异步任务,一般需要实现3个方法。
⦁ onPreExecute():异步任务执行前的准备工作
⦁ doInBackground():在后台执行异步任务。只有该方法在子线程中执行
⦁ onPostExecute():异步任务执行后的收尾工作
好了,下面是正文咯
1 如果需要网络,需要在AndroidManifest.xml中添加权限:
<uses-permission android:name="android.permission.INTERNET"/>
2.布局文件代码,这里咱们写了一个ImageView和Button控件:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.asynctask3_urlimage.MainActivity"> <ImageView android:id="@+id/image" android:layout_width="wrap_content" android:layout_height="wrap_content"/> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="点击开始下载" android:onClick="btnClick"/> </LinearLayout>
3.创建HttpUtils类做为工具类:
public class HttpUtils { // 下载网络数据 public static byte[] getUrlData(String urlStr) { try { // 创建连接对象 URL url = new URL(urlStr); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); // 设置连接参数 conn.setConnectTimeout(3000); // 设置超时时间 3s conn.setDoInput(true); // 允许输入 conn.setRequestMethod("GET"); // 设置请求方式 // 开始下载 InputStream is = conn.getInputStream(); ByteArrayOutputStream baos = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; while(true) { int hasRead = is.read(buffer); if(hasRead < 0) { break; } baos.write(buffer, 0, hasRead); } return baos.toByteArray(); } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return null; } }
4.创建一个异步任务类MyTask,并让他继承 AsyncTasK < Params, Progress, Result>,并重写doInBackground(),onPostExecute()方法:
public class MyTask extends AsyncTask<String, Void, byte[]> { //利用构造器传输数据 private ImageView imageView; public MyTask(ImageView imageView) { this.imageView = imageView; } // 子线程下载网络数据 @Override protected byte[] doInBackground(String... params) { String url = params[0]; byte[] data = HttpUtils.getUrlData(url); return data; } // 主线程解码并显示图片 @Override protected void onPostExecute(byte[] data) { super.onPostExecute(data); Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length); imageView.setImageBitmap(bitmap); } }
5.最后的是MainActivity.java:
public class MainActivity extends AppCompatActivity { private ListView listview; //网上找的图片的连接 private static final String URL = "http://imgsrc.baidu.com/image/c0%3Dshijue1%2C0%2C0%2C294%2C40/sign=407b2e95de3f8794c7f2406dba726481/a5c27d1ed21b0ef4c9eb5573d7c451da81cb3e98.jpg"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); listview = (ListView) findViewById(R.id.listview); // 加载数据 MyTask task = new MyTask(); task.setOnGetDataListener(new MyTask.OnGetDataListener() { @Override public void onGetData(List<Person> persons) { // 把数据显示到listview上 MyAdapter adapter = new MyAdapter(MainActivity.this, persons); listview.setAdapter(adapter); } }); task.execute(URL); } }
以上就是通过AsyncTask下载网络图片的代码就这些了,咱们这里就不贴上运行后的效果图了哈。
谢谢大家阅读,本文仅供参考,有疑问或错误请大家指出,谢谢。
相关文章推荐
- 使用ListView和AsyncTask、fastjson解析Json以及适配器BaseAdapter来实现下载网络的图片以及文字并显示出来
- AsyncTask--实现从网络下载一张图片的功能
- iOS 通过网络请求获取图片的下载歌曲
- android通过网络下载图片并设置为桌面
- Android之AsyncTask异步任务下载网络图片
- Android异步下载网络图片(其二:AsyncTask)
- 利用AsyncTask下载网络图片
- 通过网络Url下载图片并下载到本地相册
- android--AsyncTask的应用(1)网络上图片的下载
- 通过Java HTTP连接将网络图片下载到本地
- Android初学-AsyncTask下载网络图片
- Android 用AsyncTask下载网络图片并显示百分比
- ListView通过自定义的Adapter实现异步下载显示网络图片
- 通过Java HTTP连接将网络图片下载到本地
- 通过Java HTTP连接将网络图片下载到本地
- Android异步下载网络图片(其二AsyncTask)
- 【Android学习笔记系列】AsyncTask、BaseAdapter整合异步加载用例(通过解析JSON格式数据加载网络图片内容)
- ListView通过自定义的Adapter实现异步下载显示网络图片
- Android中AsyncTask的简单用法及实现网络图片下载的实例
- AsyncTask 异步任务下载网络图片