Android之AsyncTask网络加载图片
来源:互联网 发布:高端是淘宝违禁词吗 编辑:程序博客网 时间:2024/06/05 12:42
最近在学习AsyncTask,先看下AsyncTask的定义:
public abstract class AsyncTask<Params, Progress, Result>Params-启动任务时执行的输入参数。
Progress-后台任务执行的进度。
Result-任务结束后所返回的结果。
并不是所有的参数都会被用到,如果没有用到则用Void代替。
AsyncTask 主要有如下方法:
execute((Params... params)方法:启动AsyncTask。要在UI线程中执行
四大方法:
onPreExecute()方法;第一个执行的方法
doInBackground(Params... params)方法:执行完onPreExecute()方法后便开始执行,耗时操作都在这里执行。并返回计算结果onProgressUpdate(Progress... values)方法:与doInBackground(Params... params)方法一起执行,并将进度更新到UI组件中。onPostExecute(Result result)方法:当doInBackground(Params... params)方法执行完后便开始执行。得到doInBackground(Params... params)方法返回的计算结果,在此方法中与UI线程中交互。以上四个方法不能手动调用。doInBackground(Params... params)方法不能与UI进行交互
开始AsyncTask网络加载图片实例:package com.example.kira.newasycndemo;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.widget.ImageView;import android.widget.ProgressBar;public class MainActivity extends AppCompatActivity { private ProgressBar mprogressBar; private ImageView imageView; private static String URL="http://img.my.csdn.net/uploads/201504/12/1428806103_9476.png"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.image); mprogressBar= (ProgressBar) findViewById(R.id.pb); imageView= (ImageView) findViewById(R.id.image); MyAsycnTask my=new MyAsycnTask(MainActivity.this,imageView,mprogressBar); my.execute(URL); }}
MyAsycnTask类:
<pre name="code" class="java">package com.example.kira.newasycndemo;import android.content.Context;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.os.AsyncTask;import android.util.Log;import android.view.View;import android.widget.ImageView;import android.widget.ProgressBar;import java.io.BufferedInputStream;import java.io.IOException;import java.io.InputStream;import java.net.HttpURLConnection;import java.net.MalformedURLException;import java.net.URL;/** * Created by Kira on 2016/9/24. */public class MyAsycnTask extends AsyncTask<String,Void,Bitmap> {
//String-传入的地址是String类型的,Void-不需要看到后台任务的执行程度,故为Void, Bitmap-最后返回一个Bitmap类型。 private Context context; private ImageView img; private ProgressBar progressBar; MyAsycnTask(Context context, ImageView img, ProgressBar progressBar) { this.context=context; this.img=img; this.progressBar=progressBar; } @Override protected Bitmap doInBackground(String... params) {//String... params代表可以传入多个参数进来 Log.i("=====","doInBackground"); String url=params[0];//因为只有一个参数传进来,所以直接params[0],将第一个参数取出来即可。 try { URL u=new URL(url); HttpURLConnection conn= (HttpURLConnection) u.openConnection();//打开链接 conn.setRequestMethod("GET"); //设置请求方法 conn.setReadTimeout(5*1000); //设置延迟时间 InputStream is = null; //创建输入流 int code= conn.getResponseCode(); if (code==200) { is=conn.getInputStream(); //获取输入流 BufferedInputStream bis=new BufferedInputStream(is); //创建缓冲区,提高效率。 Thread.sleep(5*1000);//让线程进行休眠,方便看到进度条更新。 Bitmap bitmap= BitmapFactory.decodeStream(bis); //获得Bitmap is.close(); bis.close(); return bitmap; } } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); } return null; } @Override protected void onPreExecute() { Log.i("=====","onPreExecute"); super.onPreExecute(); progressBar.setVisibility(View.VISIBLE); } @Override protected void onPostExecute(Bitmap bitmap) { Log.i("=====","onPostExecute"); super.onPostExecute(bitmap); img.setImageBitmap(bitmap); progressBar.setVisibility(View.GONE); }}
布局文件:
image.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" android:padding="10dp"> <ImageView android:id="@+id/image" android:layout_width="match_parent" android:layout_height="match_parent" /> <ProgressBar android:id="@+id/pb" android:layout_width="90dp" android:layout_height="90dp" android:visibility="gone" android:layout_centerInParent="true"/></RelativeLayout>记得在AndroidManifest中获取网络权限
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
0 0
- Android之AsyncTask网络加载图片
- [Android] AsyncTask使用实例---加载网络图片
- [Android] AsyncTask使用实例---加载网络图片
- [Android] AsyncTask使用实例---加载网络图片
- [Android] AsyncTask使用实例---加载网络图片
- [Android] AsyncTask使用实例---加载网络图片
- [Android] AsyncTask使用实例---加载网络图片
- [Android] AsyncTask使用实例---加载网络图片
- [Android] AsyncTask使用实例---加载网络图片
- AsyncTask之加载图片
- Android有效加载图片 之 使用AsyncTask异步加载图片
- 使用AsyncTask 加载网络图片
- 【Android基础】AsyncTask示例——加载网络图片
- Android 异步加载图片-AsyncTask
- Android 异步加载图片-AsyncTask
- android AsyncTask介绍 详解AsyncTask的使用 使用实例---加载网络图片
- Android网络之加载网络中图片
- Android多线程之AsyncTask 一 下载网络图片
- hihocoder1391 Country
- 快速浏览和操作Buffer -- 插件: MiniBufExplorer 下载地址 [http://www.vim.org/scripts/script.php?script_id=159] 版
- BZOJ 1088 [SCOI2005]扫雷Mine
- 1007: 小Y的问题【TYVJ2016国庆赛D1T2】
- C++ - STL简介
- Android之AsyncTask网络加载图片
- A星寻路简单实现
- POJ 3666 DP
- 什么是solr,solr与solrCore
- CSS之hack与浏览器兼容常用技巧
- QuartzCore.framework
- 屏幕适配之基础常识
- 牛刀小试 : jquery ztree 树形结构小结
- Java 8新特性