android 3,0之后就不允许在主线程进行网络操作,所以在开发中,在联网过程中必须使用异步线程,有俩种方式

1.AsyncTask

2.handler 

接下来使用AsyncTask的基本使用 示例:从网络下载图片,进度条更新下载进度。

package com.zx.progress;


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.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;


public class MainActivity extends Activity {



//图片地址
private String imageUrl="http://f.hiphotos.baidu.com/image/pic/item/a2cc7cd98d1001e93cbe5587ba0e7bec55e797b3.jpg";
private Button btn;
private ImageView iv;
private ProgressDialog dialog;//进度条
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
dialog=new ProgressDialog(this);
dialog.setMessage("正在下载。。。");
dialog.setCancelable(false);
dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
btn=(Button) findViewById(R.id.button1);
iv=(ImageView) findViewById(R.id.imageView1);
btn.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {


new MyTask().execute(imageUrl);
}
});
}


class MyTask extends AsyncTask{


@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
super.onPreExecute();
dialog.show();
}

//耗时任务在该方法中执行
@Override
protected Bitmap doInBackground(String... params) {

Bitmap bitmap=null;
HttpClient client=new DefaultHttpClient();
HttpGet httpGet=new HttpGet(params[0]);
InputStream inputStream=null;
ByteArrayOutputStream outputStream=new ByteArrayOutputStream();
try {

 HttpResponse httpResponse=client.execute(httpGet);
 if(httpResponse.getStatusLine().getStatusCode()==200){ 
 
 inputStream=httpResponse.getEntity().getContent();
 long file_length=httpResponse.getEntity().getContentLength();//文件总长度
 int progress=0;
 int len=0;
 int value=0;
 byte[] data=new byte[1024];//每个读取1024个字节
 while((len=inputStream.read(data))!=-1){
 progress+=len;
 value=(int)(progress/(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: handle exception
e.printStackTrace();
}
finally{

}
return bitmap;
}

@Override
protected void onProgressUpdate(Integer... values) {
// TODO Auto-generated method stub
super.onProgressUpdate(values);
dialog.setProgress(values[0]);//更新进度
}

@Override
protected void onPostExecute(Bitmap result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
dialog.dismiss();
iv.setImageBitmap(result);
}

}


@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}


}

更多相关文章

  1. 解决下载android sdk慢的问题
  2. 最新Android(安卓)4.x 搭建开发环境
  3. SwipeRecyclerview使用中一些常见错误处理方法【持续更新中】
  4. Android中进行图片缩放显示
  5. Embedded Android(安卓)协同翻译
  6. android SDK安装以及环境变量配置(windows)
  7. Android(安卓)DownloadManager的用法
  8. Windows 10下安装配置Android(安卓)Studio 3.2.0简要教程
  9. 多线程下载 附源码

随机推荐

  1. Android使用JNI生成.so文件并调用(使用传
  2. Android开发实践:多线程编程小结
  3. Android 图片特效如何实现及总结
  4. Android so 文件进阶 从dlsym()源码看and
  5. android 修改menu 背景及添加图标
  6. Android 真的能跨平台吗?(翻译)
  7. 记录一下我的Android学习过程-第一课
  8. 将程序安装到SD卡
  9. 幻灯片播放学习笔记
  10. Android实现分享(Share)功能