Bitmap缓存图片

本篇所注意的是文档路径,清单配置权限。测试的话,汲取教训一定要确定好是下载的路径在搞起。方法:复制粘贴下载路径在IE栏里回车,弹出下载框就是下载路径,

这里还有些待优化,下载文件路径用字符串截取获得文件名,保存到本地。如果在线程中用户并发下载量大,需要再次做判断.ps有会做判断的大神路过留下笔记,感激不尽。

1,知识点一,File file = new File(getCacheDir(),"wenjianming.jpg");//ps记住第二个参数是文件名,搞了1个多小时才明白这里错了

2,知识点二,Bitmap bit = BitmapFactory.decodeFile(file.getAbsolutePath()); //ps这个意思是工厂模式直接读取绝对路径的图片

3,知识点三,iv.setImageBitmap(bit);//ps这个方法也可以直接显示到页面,而且方便的是不用写流从本地读取了

代码如下:

通过点击事件跳转到另一个执行

package com.example.imagedemo;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.ImageView;

/**
 * 
 * 点击按钮,跳转到otherActivity中显示
 *
 */
public class MainActivity extends Activity {

	private EditText et ;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        et = (EditText) findViewById(R.id.main_et);
    }
//    按钮的点击事件
    public void sendImage(View v){
    	String path = "http://imgstore01.cdn.sogou.com/v2/thumb/dl/8057062.jpg?appid=10150005&url=http://img02.sogoucdn.com/app/a/100520021/e6347472383355ae7a43795c035073ad";
    	Intent intent = new Intent();
//    	显示跳转,this是本类对象,class是跳转的目标文件
    	intent.setClass(this, otherActivity.class);
//    	传参数跟Map集合一样,是键值对
    	intent.putExtra("key", path);
//    	无返回值跳转
    	startActivity(intent);
    }

    
}



2,跳转过来后的Activity

package com.example.imagedemo;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import org.apache.http.HttpEntity;
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 android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.widget.ImageView;
import android.widget.Toast;

public class otherActivity extends Activity {

	private ImageView iv;
	private Handler handler = new Handler(){
		public void handleMessage(android.os.Message msg) {
			if (msg.what==1) {
//				相等把位图显示至页面上
				Bitmap bit = (Bitmap) msg.obj;
				iv.setImageBitmap(bit);
			
			}else{
				Toast.makeText(otherActivity.this, "读取失败",0).show();
			}
		}
	};
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
//		加载的这个布局
		setContentView(R.layout.ohter_act);
		iv = (ImageView) findViewById(R.id.main_iv);
//		接收
		resiver();
	}
	private void resiver() {
//		接收参数
		 Intent intent = getIntent();
		 final String str = intent.getStringExtra("key");
		 final File file = new File(getCacheDir(),"fdfsa.jpg");
		
//		判断文件是否存在,存在从流里读取数据
		if (file.exists()) {
			Log.i("gxx", "如果存在从缓存中读取");
//			存在直接更新UI
			Bitmap bit = BitmapFactory.decodeFile(file.getAbsolutePath());
			iv.setImageBitmap(bit);
//			return;
		}else{
		 Thread t = new Thread(){
			 @Override
			public void run() {
				
//				 网络请求
				 HttpClient client = new DefaultHttpClient();
//				 请求方式
				 HttpGet get = new HttpGet(str);
//				 客户端请求获取响应对象
				 try {
					HttpResponse response = client.execute(get);
//					获取实体对象
					HttpEntity entity = response.getEntity();
//					用读取流
					InputStream is = entity.getContent();
//					写入本地
					OutputStream os = new FileOutputStream(file);
					
					byte[] b = new byte[1024];
					int len = -1;
					while ((len = is.read(b))!=-1) {
						os.write(b, 0, len);
						 Log.i("gxx", "执行到此处");
						os.flush();
					}
					os.close();
//					读取出流里的数据,并构成位图对象
					Bitmap bm = BitmapFactory.decodeFile(file.getAbsolutePath());
//					发送消息
					Message msg = handler.obtainMessage();
					msg.obj = bm;
					msg.what = 1;
					handler.sendMessage(msg);
				 
				} catch (ClientProtocolException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				 
			}

			
		 };
		 t.start();
		}
		
	}
	
	
	
}


你可能感兴趣的:(Bitmap缓存图片)