zoukankan      html  css  js  c++  java
  • 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;
    	}
    
    }


  • 相关阅读:
    php多态
    ssl certificate problem: self signed certificate in certificate chain
    test plugin
    open specific port on ubuntu
    junit vs testng
    jersey rest service
    toast master
    use curl to test java webservice
    update folder access
    elk
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/4377726.html
Copyright © 2011-2022 走看看