实现效果:

/*采用异步任务  AsyncTask<String,Integer, byte[]>
  * 参数一代表 执行异步任务时传递的参数的类型
  * 参数二 如果不采用进度,则填Void,否则填 Integer
  * 参数三 是指网络回传回来的数据类型
  */

客户端代码:

MainActivity.java

 package com.example.load_jpg;

 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.client.DefaultHttpClient; import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Context;
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;
import android.widget.Toast; public class MainActivity extends Activity { private ProgressDialog dialog;
private ImageView iv;
private Button btn;
private final static String PATH="http://172.16.30.146:8080/Phone/a10.jpg";
private Context context; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
context = this;
init();
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
new MyTask().execute(PATH);//执行异步任务
}
});
}
private void init() {
iv =(ImageView) findViewById(R.id.image);
btn = (Button) findViewById(R.id.btn);
dialog = new ProgressDialog(context);
dialog.setCancelable(true);
dialog.setTitle("提醒");
dialog.setMessage("正在下载中...");
dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
} public class MyTask extends AsyncTask<String, Integer, byte[]>{ @Override
protected void onPreExecute() {//在异步符务执行之前 这个方法会被执行
dialog.show();
super.onPreExecute();
} @Override
protected byte[] doInBackground(String... params) {
HttpClient httpClient = new DefaultHttpClient();
HttpGet httpGet = new HttpGet(params[]); InputStream is = null;
ByteArrayOutputStream bos =new ByteArrayOutputStream(); try {
HttpResponse httpResponse = httpClient.execute(httpGet);//执行path
if(httpResponse.getStatusLine().getStatusCode()==){
is = httpResponse.getEntity().getContent(); long total_length = httpResponse.getEntity().getContentLength();
int current_length = ;
byte[] tmp = new byte[];
int len;
while((len=is.read(tmp))!=-){
current_length+=len;
int update = (int)((float)current_length/total_length*);
publishProgress(update);
bos.write(tmp, , len);
}
return bos.toByteArray(); }
} catch (Exception e) { }finally{
httpClient.getConnectionManager().shutdown();
} return null;
} @Override
protected void onProgressUpdate(Integer... values) {
dialog.setProgress(values[]);
super.onProgressUpdate(values);
} @Override
protected void onPostExecute(byte[] result) {
if(result!=null){
Bitmap bitmap = BitmapFactory.decodeByteArray(result, , result.length);
iv.setImageBitmap(bitmap);
Toast.makeText(context, "下载成功", Toast.LENGTH_LONG).show();
}else{
Toast.makeText(context, "下载失败", Toast.LENGTH_LONG).show();
}
dialog.dismiss();
super.onPostExecute(result);
} } }

activity_main.xml

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".LoadPicActivity" > <ImageView
android:id="@+id/image"
android:layout_width="300dp"
android:layout_height="300dp"
android:src="@drawable/ic_launcher"
/> <Button
android:id="@+id/btn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="下载" />
</LinearLayout>

服务器端:建立web project,放入图片即可

最后在清单里注册:<uses-permission android:name="android.permission.INTERNET"/>

AsyncTask实现下载图片的更多相关文章

  1. Android测试AsyncTask下载图片

    package com.example.myact8_async; import org.apache.http.HttpEntity; import org.apache.http.HttpResp ...

  2. Android 异步任务——AsyncTask (附使用AsyncTask下载图片Demo)

    我们编程的时候经常需要处理同步任务和异步任务,在Android里面存在一个特性,就是UI线程是不安全的线程.所谓UI线程不安全也就是我们的主线程(进程启动的第一个线程)不能在线程外操作主线程的资源.因 ...

  3. android 多线程 AsyncTask 下载图片

    AsyncTask 下载图片 package com.test.network; import android.graphics.Bitmap; import android.graphics.Bit ...

  4. Android多线程分析之五:使用AsyncTask异步下载图像

    Android多线程分析之五:使用AsyncTask异步下载图像 罗朝辉 (http://www.cnblogs.com/kesalin) CC 许可,转载请注明出处 在本系列文章的第一篇<An ...

  5. android 多线程下载图片

    很多时候我们需要在Android设备上下载远程服务器上的图片进行显示,今天Android123整理出两种比较好的方法来实现远程图片的下载.   方法一.直接通过Android提供的Http类访问远程服 ...

  6. Android异步下载图片并且缓存图片到本地

    Android异步下载图片并且缓存图片到本地 在Android开发中我们经常有这样的需求,从服务器上下载xml或者JSON类型的数据,其中包括一些图片资源,本demo模拟了这个需求,从网络上加载XML ...

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

    在android网络开发过程中,经常需要获取网络资源,比如下载图片,下载文本文件内容等,这个时候就需要http请求来获取相应的网络资源.首先看看实例效果图:              下载图片截图   ...

  8. Android采用HttpClient下载图片

    在上一章中谈到Android采用HttpURLConnection下载图片,本章使用HttpClient下载图片 HttpURLConnection与HttpClient的差别: HttpClient ...

  9. HttpURLConnection 传输数据和下载图片

    一.传输字符串数据 在Android中HttpURLConnection传输数据是必不可少的,我们继续在“AsyncTask(异步任务)”案例的基础上添加. 案例: 首先我们做一个jsp的服务端,文件 ...

随机推荐

  1. 如何在 Android 手机上实现抓包?

    如何在 Android 手机上实现抓包? http://www.zhihu.com/question/20467503 我想知道某个应用究竟在数据提交到哪里,提交了什么.网上的教程太复杂,不想麻烦.有 ...

  2. JAVA单线程以及java多线程的实现方式

    1.java单线程的实现 public class SingletonThread { @SuppressWarnings("static-access") public stat ...

  3. android AsyncTask 详细例子(2)

    超时处理 001 import java.util.Timer; 002 import java.util.TimerTask; 003   004 import android.app.Activi ...

  4. 解决Fetching android sdk component information加载过久问题

    安装完成后,如果直接启动,Android Studio会去获取 android sdk 组件信息,这个过程相当慢,还经常加载失败,导致Android Studio启动不起开.解决办法就是不去获取and ...

  5. Sass函数--颜色函数--RGB颜色函数

    RGB颜色函数-RGB()颜色函数 主要分为 RGB , HSL 和 Opacity 三大函数,当然其还包括一些其他的颜色函数,比如说 adjust-color 和 change-color 等.1. ...

  6. java 静态文件使用注解

    spring框架为我们代码的编写带来了极大的便利,特别是注解的使用.但是有个问题,当我们在静态文件中使用注解的时候,这个时候就会报错了.如以下代码: @Autowired private UserSe ...

  7. silverlight+wcf 项目 silverlight获得web程序的参数

    silverlight 可以通过属性InitParams 获得参数,如果参数是动态的需要web程序传递的,具体操作如下: web程序后台:AppID,USERID需要的参数 this.frmRepor ...

  8. textField:shouldChangeCharactersInRange:replacementString:

    http://blog.csdn.net/mamong/article/details/44964801

  9. hdu 2143 数组合并 二分

    Can you find it? Time Limit: 10000/3000 MS (Java/Others)    Memory Limit: 32768/10000 K (Java/Others ...

  10. C#设置鼠标在控件上面时,改变光标形状

    //设置鼠标在控件上面时,改变光标形状 private void pictureBox_macroLogo_MouseHover(object sender, System.EventArgs e) ...