图片缓存
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(); } }
相关文章推荐
- 按右键另存图片只能存BMP
- photoshop去除图片上的水印
- upload上传单张图片
- 图片引发的溢出危机(图)
- 浅析SQL Server中的执行计划缓存(上)
- Enterprise Library for .NET Framework 2.0缓存使用实例
- C#实现把彩色图片灰度化代码分享
- PowerShell中编程清空IE缓存方法
- PowerShell中使用.NET将程序集加入全局程序集缓存
- C#将图片和字节流互相转换并显示到页面上
- C#监控文件夹并自动给图片文件打水印的方法
- 纯CSS实现的当鼠标移上图片添加阴影效果代码
- C#实现打开画图的同时载入图片、最大化显示画图窗体的方法
- 随鼠标移动的图片或文字特效代码
- C#中缓存的基本用法总结
- CSS 图片横向排列实现代码
- C#实现将Email地址转成图片显示的方法
- 超级经典一套鼠标控制左右滚动图片带自动翻滚
- 用css实现图片垂直居中的使用技巧
- C++实现读取图片长度和宽度