当前位置: 代码迷 >> Android >> Android开发之使用Handler打包下载图片工具类(源代码分享)
  详细解决方案

Android开发之使用Handler打包下载图片工具类(源代码分享)

热度:13   发布时间:2016-04-28 05:50:25.0
Android开发之使用Handler封装下载图片工具类(源代码分享)

          如果每下载一张图片,就得重写一次Http协议,多线程的启动和handler的信息传递就显得太麻烦了,我们直接来封装一个工具类,便于我们以后在开发时随时可以调用。

 (1)在清单文件添加权限

  <uses-permission android:name="android.permission.INTERNET"/>

(2)编辑工具类

package com.example.g05_handler;import java.io.IOException;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 org.apache.http.util.EntityUtils;import android.annotation.SuppressLint;import android.app.ProgressDialog;import android.content.Context;import android.os.Handler;import android.os.Message;import android.util.Log;public class DownLoad {	private ProgressDialog dialog;	public DownLoad(Context context) {		// TODO Auto-generated constructor stub		dialog = new ProgressDialog(context);		dialog.setTitle("提示");		dialog.setMessage("玩命加载中");	}	@SuppressLint("HandlerLeak")	public void Down(final String path, final DownLoadCallback callback) {		final Handler handler = new Handler() {			@Override			public void handleMessage(Message msg) {				// TODO Auto-generated method stub				super.handleMessage(msg);				byte[] result = (byte[]) msg.obj;				callback.download(result);				if (msg.what == 1) {					dialog.dismiss();				}			}		};		class MyThread implements Runnable {			@Override			public void run() {				// TODO Auto-generated method stub				HttpClient client = new DefaultHttpClient();				HttpGet httpGet = new HttpGet(path);				try {					HttpResponse httpResponse = client.execute(httpGet);					Log.i("TAG", "------>"							+ httpResponse.getStatusLine().getStatusCode());					if (httpResponse.getStatusLine().getStatusCode() == 200) {						byte[] result = EntityUtils.toByteArray(httpResponse								.getEntity());						Message message = Message.obtain();						message.obj = result;						message.what = 1;						handler.sendMessage(message);					}				} catch (ClientProtocolException e) {					// TODO Auto-generated catch block					e.printStackTrace();				} catch (IOException e) {					// TODO Auto-generated catch block					e.printStackTrace();				} finally {					if (client != null) {						client.getConnectionManager().shutdown();					}				}			};		}		new Thread(new MyThread()).start();		dialog.show();	}	public interface DownLoadCallback {		public void download(byte[] data);	}}

    (3)调用该工具类

package com.example.g05_handler;import com.example.g05_handler.DownLoad.DownLoadCallback;import android.os.Bundle;import android.app.Activity;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.view.Menu;import android.view.View;import android.widget.Button;import android.widget.ImageView;public class MainActivity extends Activity {    private Button button;    private ImageView imageView;    private final String path="http://avatar.csdn.net/D/7/5/1_u013900875.jpg";	@Override	protected void onCreate(Bundle savedInstanceState) {		super.onCreate(savedInstanceState);		setContentView(R.layout.activity_main);		button=(Button)this.findViewById(R.id.button1);		imageView=(ImageView)this.findViewById(R.id.imageView1);		button.setOnClickListener(new View.OnClickListener() {						@Override			public void onClick(View v) {				// TODO Auto-generated method stub				DownLoad downLoad=new DownLoad(MainActivity.this);				downLoad.Down(path, new DownLoadCallback() {										@Override					public void download(byte[] data) {						// TODO Auto-generated method stub						Bitmap bitmap=BitmapFactory.decodeByteArray(data, 0, data.length);						imageView.setImageBitmap(bitmap);					}				});			}		});	}	@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;	}}


  相关解决方案