异步操作AsyncTask(二)从网络下载图片(带下载进度数据)

package com.example.asyntaskproject;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import android.app.Activity;
import android.app.ProgressDialog;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;

public class MainActivity extends Activity {

	private ImageView imageView;
	private Button button;
	//图片的网络地址
	private String image_path = "http://pic4.nipic.com/20090828/2366808_092035042961_2.jpg";
	private ProgressDialog dialog ;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		imageView = (ImageView) findViewById(R.id.imageView1);
		button = (Button) findViewById(R.id.button1);
		dialog = new ProgressDialog(this);
		dialog.setTitle("提示");
		dialog.setMessage("正在下载,请稍后..");
		dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
		dialog.setCancelable(false);
		//不让屏幕失去焦点,即点其他的地方的时候进度条不消失
		button.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				new MyTask().execute(image_path);
			}
		});
	}
	public class MyTask extends AsyncTask<String, Integer, Bitmap>{

		@Override
		protected void onPreExecute() {
			// TODO Auto-generated method stub
			super.onPreExecute();
			dialog.show();
		}
		@Override
	        protected void onProgressUpdate(Integer... values) {
			// TODO Auto-generated method stub
			super.onProgressUpdate(values);
			dialog.setProgress(values[0]);
		}
		@Override
		protected Bitmap doInBackground(String... params) {
			// TODO Auto-generated method stub
			Bitmap bitmap = null;
			//声明一个内存流,用于将他图片读取放到内存缓冲区中
			ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
			InputStream inputStream = null;
			HttpClient httpClient = new DefaultHttpClient();
			HttpGet httpGet = new HttpGet(params[0]);
			HttpResponse httpResponse;
			try {
				httpResponse = httpClient.execute(httpGet);
				if(httpResponse.getStatusLine().getStatusCode() == 200){
					inputStream = httpResponse.getEntity().getContent();
					long file_length = httpResponse.getEntity().getContentLength();
					int len = 0;
					byte[] data = new byte[1024];
					int total_length = 0;
					while((len = inputStream.read(data)) != -1){
						total_length += len;
						//刻度百分比
						int value = (int)((total_length/(float)file_length)*100);
						publishProgress(value);
						outputStream.write(data, 0, len);
					}
					byte[] result = outputStream.toByteArray();
					bitmap = BitmapFactory.decodeByteArray(result, 0, result.length);
				}
			}catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}finally{
				if(inputStream != null){
					try {
						inputStream.close();
					} catch (IOException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
				}
			}
			return bitmap;
		}
		@Override
		protected void onPostExecute(Bitmap result) {
			// TODO Auto-generated method stub
			super.onPostExecute(result);
			dialog.dismiss();
			imageView.setImageBitmap(result);
		}
	}
}

免积分源代码下载

时间: 2024-10-27 21:10:38

异步操作AsyncTask(二)从网络下载图片(带下载进度数据)的相关文章

Android开发之异步获取并下载网络资源-下载图片和下载文本内容

在android网络开发过程中,经常需要获取网络资源,比如下载图片,下载文本文件内容等,这个时候就需要http请求来获取相应的网络资源.首先看看实例效果图:              下载图片截图                                                                                                下载文本文件内容截图 下面介绍如何来实现这样的开发: (1)从指定的URL获取对应的流 既然要获取网络资源,那么

js 下载图片与下载文件的方式一样;保存至本地 ASP.NET 方式

<asp:Button ID="btnDownLoad" runat="server" style="display: none" Text="a" OnClick="btnDownLoad_Click" TabIndex="100" /> <asp:HiddenField ID="hidImageUrl" runat="server&qu

linux批量下载图片,下载整个目录的图片

要下载的是这个网站目录的所有图片,里面是一些手机壁纸.每个图片的url只有文件名是不同的. curl命令在这是不行的,它的正则匹配只适用于规则的文件名,如foo1,foo2,foo3.....,curl命令要求每个url都是确定的. 单独使用wget命令也不行,wget -r -np -nd 下载目录下的所有文件失败,提示no description,不知道什么原因. 一个不错的处理方法是用lynx或links这种基于CLI的浏览器,dump出所有图片的url,再结合wget进行下载 命令如下:

Android 下载图片并且设置进度条

package com.example.asynctask; import java.io.ByteArrayOutputStream;import java.io.InputStream; import org.apache.http.HttpResponse;import org.apache.http.client.HttpClient;import org.apache.http.client.methods.HttpGet;import org.apache.http.impl.cli

分享个新浪下载图片的ProgressBar进度样式

https://github.com/eltld/ImageLoadProgress2

Android中使用HttpURLConnection实现GET POST JSON数据与下载图片

Android6.0中把Apache HTTP Client所有的包与类都标记为deprecated不再建议使用 所有跟HTTP相关的数据请求与提交操作都通过HttpURLConnection类实现,现实是 很多Android开发者一直都Apache HTTP Client来做andoird客户端与后台HTTP接口数 据交互,本人刚刚用HttpURLConnection做了一个android的APP,不小心踩到了几个 坑,总结下最常用的就通过HttpURLConnection来POST提交JSO

如何控制WebBrowser控件不下载图片

Sidyhe在http://blog.csdn.net/sidyhe/article/details/9073485 一文中,利用C++以及Windows SDK实现了WebBrowser控件的容器. 我们可以在Sidyhe的基础上,简单修改CXWebBrowser类,即可控制其在访问页面时,不下载图片(对其他下载资源的控制可参照图片的). 具体实现只要修改Invoke函数即可,原来的Invoke函数如下: HRESULT CXWebBrowser::Invoke(DISPID dispIdMe

AFNetworking断点续传、下载图片

下载图片:下载图片后保存在本地文件中 //在lock和挂起状态都会下载 NSURLRequest *request=[[NSURLRequest alloc]initWithURL:[NSURL URLWithString:@"http://attach.bbs.miui.com/forum/201110/05/082552rm0v11zlv1axd13l.png"]]; //操作配置 AFHTTPRequestOperation *requestOperator=[[AFHTTPRe

异步操作AsyncTask(一)从网络下载图片

首先先声明访问网络权限 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.asktaskdownload" android:versionCode="1" android:versio

android:异步任务asyncTask介绍及异步任务下载图片(带进度条)

为什么要用异步任务? 在android中只有在主线程才能对ui进行更新操作,而其它线程不能直接对ui进行操作 android本身是一个多线程的操作系统,我们不能把所有的操作都放在主线程中操作 ,比如一些耗时操作.如果放在主线程中 会造成阻塞 而当阻塞事件过长时 系统会抛出anr异常.所以我们要使用异步任务.android为我们提供了一个封装好的组件asynctask. AsyncTask可以在子线程中更新ui,封装简化了异步操作.适用于简单的异步处理.如果多个后台任务时就要使用Handler了