王学岗自定义AsycTask
来源:互联网 发布:java支付平台开发demo 编辑:程序博客网 时间:2024/06/05 03:12
布局文件我就不写了,就是几个控件
package com.tz.kateasyctask_tz;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.net.HttpURLConnection;import java.net.MalformedURLException;import java.net.ProtocolException;import java.net.URL;import android.app.Activity;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.os.AsyncTask;import android.os.Bundle;import android.os.Environment;import android.view.View;import android.view.View.OnClickListener;import android.widget.ImageView;import android.widget.ProgressBar;import android.widget.TextView;public class MainActivity extends Activity { private ProgressBar pb; private TextView progressText; private ImageView iv_Image; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); pb = (ProgressBar) findViewById(R.id.pb); progressText = (TextView) findViewById(R.id.tv); iv_Image = (ImageView) findViewById(R.id.iv_image); findViewById(R.id.button1).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { start(); } }); } protected void start() { //开始下载图片: url String url = "http://e.hiphotos.baidu.com/image/pic/item/14ce36d3d539b600be63e95eed50352ac75cb7ae.jpg"; KateAsycTask task = new KateAsycTask(); task.execute(url,1+""); } /** * Params : 开启线程传入的参数 :url 请求参数 * Progress :异步任务执行的进度 * Result :结果(异步任务执行后返回的结果) * @author Administrator * */ class KateAsycTask extends AsyncTask<String, Integer, Bitmap>{ private InputStream inputStream; private final String SD_CARD_PATH = Environment.getExternalStorageDirectory().getAbsolutePath().toString(); private int maxLength; private FileOutputStream outputStream; /** * 运行在主线程:在异步任务执行之前调用() * 主要做一些初始化 */ @Override protected void onPreExecute() { // TODO Auto-generated method stub super.onPreExecute(); } /** * 在子线程中执行:执行下载任务 */ @Override protected Bitmap doInBackground(String... params) { Bitmap bitmap =null; String imageUrl = params[0];//String s = params[1]; try { //1,创建url URL url = new URL(imageUrl); //2,打开链接 HttpURLConnection conn = (HttpURLConnection) url.openConnection(); //3,设置请求方式 conn.setRequestMethod("GET"); //4,设置超时时间 conn.setConnectTimeout(5000); if(conn.getResponseCode() == 200){ maxLength = conn.getContentLength(); //设置进度条的最大值 pb.setMax(maxLength); inputStream = conn.getInputStream(); //为主线程中的imageView设置图片---- //bitmap = BitmapFactory.decodeStream(inputStream); String fileName = imageUrl.substring(imageUrl.lastIndexOf("/")+1); outputStream = new FileOutputStream(SD_CARD_PATH+"/"+ fileName); int len = 0; byte[] buffer = new byte[1024]; while((len=inputStream.read(buffer))!=-1){ outputStream.write(buffer, 0, len); //更新进度条---不能在这里更新:onProgressUpdate //onProgressUpdate(len); publishProgress(len);//触发调用onProgressUpdate } bitmap = BitmapFactory.decodeFile(SD_CARD_PATH+"/"+fileName); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ try { if(outputStream!=null){ outputStream.close(); } if(inputStream!=null){ inputStream.close(); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } return bitmap; } /** * 在主线程中执行:接收异步任务下载的进度 更新UI线程的控件 */ @Override protected void onProgressUpdate(Integer... values) { pb.setProgress(pb.getProgress()+values[0]); String text = "下载进度:"+100 * pb.getProgress() / maxLength+ "%" ; progressText.setText(text); super.onProgressUpdate(values); } /** * 在主线程中执行:接收异步线程返回的结果 */ @Override protected void onPostExecute(Bitmap result) { super.onPostExecute(result); iv_Image.setImageBitmap(result); } /** * 取消异步任务(终止) */ @Override protected void onCancelled() { // TODO Auto-generated method stub super.onCancelled(); } }}
1 0
- 王学岗自定义AsycTask
- AsycTask
- AsycTask------MainActivity
- AsycTask----MyAsycTask类
- Android线性模型和AsycTask
- Thread、AsycTask、IntentService的比较
- Thread、AsycTask、IntentService的比较
- AsycTask(handler的封装类)
- Android异步任务机制之AsycTask
- AsycTask源码解读以及遇到的问题
- Android异步任务机制之AsycTask
- Android异步任务机制之AsycTask
- android多线程编程(Thread,Handle,AsycTask)
- Android 多线程handler,runnable,asyctask使用
- Android异步任务机制之AsycTask
- Android异步任务机制之AsycTask
- Thread、AsycTask、IntentService的使用场景与特点
- 王学岗自定义的dialog
- iOS系统架构
- ES6核心内容之语法
- VS2012 找不到实体对象模型,为VS2012安装entity framework6
- Mysql5.6主从热备配置
- MySQL 存储过程常用SQL语句收集
- 王学岗自定义AsycTask
- Android OkHttp完全解析 是时候来了解OkHttp了
- JS火星坐标系转百度坐标系(公式法)
- 打印100~200间的素数
- POJ 3252 数位DP
- android app中使用application
- 微信公众号在打开的网站中直接进入苹果应用商店
- 区块链钱包怎么开发
- ios开发:push与present的区别