您的位置:首页 > 其它

图片缓存

2016-02-03 20:33 447 查看
package jacky.httpurlimage;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.util.Base64;
import android.view.View;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Toast;

import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;

public class MainActivity extends AppCompatActivity {

private static final int REQUESTSUCCESS = 0;
private static final int REQUESTNOTFIND = 1;
private EditText et_path;
//创建Handler对象
private android.os.Handler handler = new android.os.Handler() {
@Override
public void handleMessage(Message msg) {
//处理消息
super.handleMessage(msg);
switch (msg.what) {
case REQUESTSUCCESS:
Bitmap bitmap = (Bitmap) msg.obj;
iv_show.setImageBitmap(bitmap);
break;
case REQUESTNOTFIND:
Toast.makeText(getApplicationContext(), "网络连接失败!", Toast.LENGTH_LONG);
break;
}
}
};

private ImageView iv_show;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
et_path = (EditText) findViewById(R.id.et_path);
iv_show = (ImageView) findViewById(R.id.iv_show);
}

public void click(View v) {

//开辟线程
new Thread() {
@Override
public void run() {
super.run();
try {
String path = et_path.getText().toString().trim();
File file = new File(getCacheDir(), Base64.encodeToString(path.getBytes() ,Base64.DEFAULT));
if (file.exists() && file.length() > 0) {
//读取缓存的逻辑
System.out.println("使用缓存图片!");
Bitmap bitmap = BitmapFactory.decodeFile(file.getAbsolutePath());
Message msg = Message.obtain();
msg.obj = bitmap;
handler.sendMessage(msg);
} else {
//第一次访问网络图片
System.out.println("第一次访问图片!");
URL url = new URL(path);
//获得连接
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setReadTimeout(5000);
int code = conn.getResponseCode();
if (code == 200) {
InputStream in = conn.getInputStream();

//图片缓存
FileOutputStream fos = new FileOutputStream(file);
int len = -1;
byte[] buffer = new byte[1024];
while ((len = in.read(buffer)) != -1) {
fos.write(buffer, 0, len);
}
fos.close();
in.close();

Bitmap bitmap = BitmapFactory.decodeFile(file.getAbsolutePath());
/**
*Message msg=new Message;
*使用静态方法,减少new的次数,提高效率

4000
*/
Message msg = Message.obtain();
//设置传出的数据
msg.obj = bitmap;
msg.what = REQUESTSUCCESS;
handler.sendMessage(msg);
} else {
Message msg = Message.obtain();
msg.what = REQUESTNOTFIND;
handler.sendMessage(msg);
}

}
} catch (Exception e) {
e.printStackTrace();
}
}
}.start();
}

}






内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  图片 缓存