示例最终效果图:
AndroidManifest.xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.lesson" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="7" android:targetSdkVersion="7" /> <!-- 用于访问网络的授权 --> <uses-permission android:name="android.permission.INTERNET"/> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.lesson.MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
基本布局文件activity_main.xml:一个ImageView和一个Button
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" > <ImageView android:id="@+id/imageView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:layout_marginTop="48dp"/> <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_centerHorizontal="true" android:text="下载图片" /> </RelativeLayout>
MainActivity.java
/* * 异步任务实现activity中加载网络图片 */ package com.lesson; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import org.apache.http.HttpResponse; import org.apache.http.client.ClientProtocolException; 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.test.AndroidTestCase; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.ImageView; public class MainActivity extends Activity { private Button button; private ProgressDialog progerssDialog; private ImageView imageView;//要加载的图片 private final String url="http://www.windows7en.com/desk/UploadFiles_7433/201006/2010060910062279.jpg"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.setContentView(R.layout.activity_main); button=(Button)findViewById(R.id.button1); imageView=(ImageView)findViewById(R.id.imageView1); progerssDialog=new ProgressDialog(this); progerssDialog.setCancelable(false); //设置进度条水平加载 progerssDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); button.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { //异步任务调用 new ImageUpdate().execute(url); } }); } class ImageUpdate extends AsyncTask<String, Integer,byte[]>{ //线程启动时,该方法被调用次序:2 @Override protected byte[] doInBackground(String... arg0) { HttpGet httpGet=new HttpGet(arg0[0]); InputStream inputStream=null; byte[] result=null; byte[] data=new byte[1024]; HttpClient client = new DefaultHttpClient(); ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); try { HttpResponse httpResponse=client.execute(httpGet);//得到响应 if(httpResponse.getStatusLine().getStatusCode()==200){ inputStream=httpResponse.getEntity().getContent(); //文件总长度 int filelenth=(int) httpResponse.getEntity().getContentLength(); int readlength=0; int totallenth=0; while((readlength=inputStream.read(data))!=-1){ totallenth+=readlength; //用于进度条刻度计算公式 int progressValue= (int)((totallenth/(float)filelenth)*100); //将刻度值传递到第2步 publishProgress(progressValue); outputStream.write(data, 0, readlength); } result=outputStream.toByteArray(); } } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }finally{ client.getConnectionManager().shutdown(); } return result; } //线程启动时,该方法被调用次序:4 @Override protected void onPostExecute(byte[] result) { // TODO Auto-generated method stub super.onPostExecute(result); Bitmap bitmap=BitmapFactory.decodeByteArray(result, 0, result.length); imageView.setImageBitmap(bitmap); progerssDialog.dismiss(); } //线程启动时,该方法被调用次序:1 @Override protected void onPreExecute() { super.onPreExecute(); //加载图片时的进度显示对话框 progerssDialog.show(); } //线程启动时,该方法被调用次序:3 @Override protected void onProgressUpdate(Integer... values) { super.onProgressUpdate(values); progerssDialog.setProgress(values[0]); } } }
相关推荐
Android AsyncTask用法和异步加载图片通过AsyncTask 从网络上异步加载一张图片
在实际的开发中过程,我们可能经常要求应用程序做一些“耗时操作”,例如网络下载,加载大量资源等。这时候我们就不能直接在UI线程中(主线程)中去完成这些“耗时操作”,因为,UI线程主要是用来更新界面UI,如果一次...
通过AsyncTask 从网络上异步加载一张图片
AsyncTask的使用及ListView的常见优化 asyncTask异步加载数据 使用了LruCache优化图片加载 通过滑动监听提高ListView滑动流畅度.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习...
Android利用异步任务AsyncTask 发送post请求并获取son字符串
http://blog.csdn.net/rwyz1314/article/details/6841639 的代码。放在这里做为备份。上一个文件传错了。也没法删除。只好重新传一个。
Android异步任务下载一张图片,关键是异步任务的流程,带进度条的异步任务
AsyncTask_ListView实现加载网络图片例子,主要是初学AsyncTask用例
本压缩包主要包括一个AsyncTask异步请求的demo,以及一个讲解AsyncTask流程及用法的文档说明,希望能帮到你
Android Handler AsyncTask 异步加载
Android异步任务AsyncTask的简单DEMO
Android Async异步操作实例---加载网络图片,实现进度条的更新
Android中使用ListView数据异步加载与AsyncTask,获取网络资源,线程池技术,多线程技术。
Android是单线程模型,耗时的操作必须放在非主线程中执行,对此,我们需要使用多线程/线程池或者AsyncTask等来完成异步加载任务。 博客地址:http://blog.csdn.net/chenzheng8975/article/details/53893666
Android学习笔记(三二):线程:后台异步任务AsyncTask_IT168文库
这是Android 异步加载图片-AsyncTask一文的代码,放在这里做个备份。 原文见 http://blog.csdn.net/rwyz1314/article/details/6841639
基于Android的AsyncTask异步任务, Android的AsyncTask将复杂的数据处理交由子线程, 将处理过程交由主线程处理
Android AsyncTask异步处理下载网页
主要介绍了Android中异步类AsyncTask用法,分析总结了Async Task类的功能、特点及相关的使用技巧与注意事项,需要的朋友可以参考下
demo详细的展示了怎样用异步处理加载网络上的一个图片,并在页面上显示