• 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;
    	}
    
    }


  • 相关阅读:
    apply call this arguments caller callee
    JavaScript 小刮号
    asp.net底层http管道
    JavaScript 使用方括号([])引用对象的属性和方法 createDelegate
    MSIL条件跳转(简单注释)
    微软MVP手把手教你如何修改.NET Framework
    简单操作IL文件
    Remoting入门实例
    AutoResetEvent和ManualResetEvent用法示例
    AutoResetEvent和ManualResetEvent用法
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/4377726.html
Copyright © 2020-2023  润新知