您的位置 首页 技术

Android异步加载网络图片

实现思路是:1:在UI线程中启动一个线程,让这个线程去下载图片。2:图片完成下载后发送一个消息去通知UI线程2:UI线程获取到消息后,更新UI。这里

完结思路是:

1:在UI线程中发动一个线程,让这个线程去下载图片。

2:图片完结下载后发送一个音讯去告诉UI线程

2:UI线程获取到音讯后,更新UI。

这儿的UI线程便是主线程。

这两个过程涉及到一些知识点,便是:ProgressDialog,Handler,Thread/Runnable,URL,HttpURLConnection等等一系列东东的运用。

现在让咱们开端来完结这个功用吧!

第一步:新建项目。

第二步:设计好UI,如下所示

View Code

android:orientation=vertical

android:layout_width=fill_parent

android:layout_height=fill_parent

>

android:id=@+id/btnFirst

android:layout_width=fill_parent

android:layout_height=wrap_content

android:text=异步下载方式一

>

android:id=@+id/btnSecond

android:layout_width=fill_parent

android:layout_height=wrap_content

android:text=异步下载方式二

>

android:layout_width=fill_parent

android:layout_height=match_parent

android:id=@+id/frameLayout

>

android:id=@+id/image

android:layout_width=match_parent

android:layout_height=match_parent

android:scaleType=centerInside

android:padding=2dp

>

android:id=@+id/progress

android:layout_width=wrap_content

android:layout_height=wrap_content

android:layout_gravity=center>

第三步:获取UI相应View组件,并增加事情监听。

View Codepublic class DownLoaderActivityextends Activityimplements OnClickListener{

private static final String params=2hdb53fcq2o.jpg/800px-Hukou_Waterfall.jpg;

private Button btnFirst,btnSecond;

private ProgressBar progress;

private FrameLayout frameLayout;

private Bitmap bitmap=null;

ProgressDialog dialog=null;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

btnFirst=(Button)this.findViewById(R.id.btnFirst);

btnSecond=(Button)this.findViewById(R.id.btnSecond);

progress=(ProgressBar)this.findViewById(R.id.progress);

progress.setVisibility(View.GONE);

frameLayout=(FrameLayout)this.findViewById(R.id.frameLayout);

btnFirst.setOnClickListener(this);

btnSecond.setOnClickListener(this);

}

第四步:在监听事情中处理咱们的逻辑,便是下载服务器端图片数据。

这儿咱们需求解说一下了。

一般的咱们把一些耗时的工效果别的一个线程来操作,比方,下载上传图片,读取大批量XML数据,读取大批量sqlite数据信息。为什么呢?答案咱们都理解,用户体会问题。

在这儿,首要我结构一个进展条对话框,用来显现下载进展,然后拓荒一个线程去下载图片数据,下载数据结束后,告诉主UI线程去更新显现咱们的图片。

Handler是交流Activity 与Thread/runnable的桥梁。而Handler是运行在主UI线程中的,它与子线程能够经过Message目标来传递数据。详细代码如下:

View Code

private Handler handler=new Handler(){

@Override

public void handleMessage(Message msg){

switch(msg.what){

case 1:

//封闭

ImageView view=(ImageView)frameLayout.findViewById(R.id.image);

view.setImageBitmap(bitmap);

dialog.dismiss();

break;

}

}

};

咱们在这儿弹出进展对话框,运用HTTP协议来获取数据。

View Code//前台ui线程在显现ProgressDialog,

//后台线程在下载数据,数据下载结束,封闭进展框

@Override

public void onClick(View view) {

switch(view.getId()){

case R.id.btnFirst:

dialog= ProgressDialog.show(this,,

下载数据,请稍等 …,true,true);

//发动一个后台线程

handler.post(new Runnable(){

@Override

public void run() {

//这儿下载数据

try{

URL url= new URL(params);

HttpURLConnection conn= (HttpURLConnection)url.openConnection();

conn.setDoInput(true);

conn.connect();

InputStream inputStream=conn.getInputStream();

bitmap= BitmapFactory.decodeStream(inputStream);

Message msg=new Message();

msg.what=1;

handler.sendMessage(msg);

}catch (MalformedURLException e1) {

e1.printStackTrace();

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/xinpin/jishu/321333.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部