1. package com.lidaochen.test;
  2.  
  3. import android.graphics.Bitmap;
  4. import android.graphics.BitmapFactory;
  5. import android.os.Bundle;
  6. import android.os.Handler;
  7. import android.os.Message;
  8. import android.support.v7.app.AppCompatActivity;
  9. import android.util.Base64;
  10. import android.view.View;
  11. import android.widget.EditText;
  12. import android.widget.ImageView;
  13. import android.widget.Toast;
  14.  
  15. import java.io.File;
  16. import java.io.FileOutputStream;
  17. import java.io.InputStream;
  18. import java.net.HttpURLConnection;
  19. import java.net.URL;
  20.  
  21. public class MainActivity extends AppCompatActivity {
  22. private EditText et_path;
  23. private ImageView iv_pic;
  24.  
  25. // 创建handler对象
  26. public Handler handler = new Handler()
  27. {
  28. @Override
  29. public void handleMessage(Message msg) {
  30. super.handleMessage(msg);
  31. Bitmap bitmap = (Bitmap)msg.obj;
  32. // 设置图片到ImageView
  33. iv_pic.setImageBitmap(bitmap);
  34. }
  35. };
  36. @Override
  37. protected void onCreate(Bundle savedInstanceState) {
  38. super.onCreate(savedInstanceState);
  39. setContentView(R.layout.activity_main);
  40. // 找到 ImageView 和 EditText控件
  41. et_path = (EditText)findViewById(R.id.et_path);
  42. iv_pic = (ImageView)findViewById(R.id.iv_pic);
  43. }
  44. public void click(View v)
  45. {
  46. new Thread()
  47. {
  48. public void run()
  49. {
  50. try
  51. {
  52. // 获取图片路径
  53. String path = et_path.getText().toString().trim();
  54. File file = new File(getCacheDir(), Base64.encodeToString(path.getBytes(), Base64.DEFAULT));
  55. if (file.exists() && file.length() > 0)
  56. {
  57. // 使用缓存图片
  58. System.out.println("使用缓存图片!");
  59. final Bitmap cacheBitmap = BitmapFactory.decodeFile(file.getAbsolutePath());
  60. // 把cacheBitmap显示到ImageView上
  61. Message msg = Message.obtain(); // 使用Message的静态方法,可以减少对象的创建
  62. msg.obj = cacheBitmap;
  63. handler.sendMessage(msg);
  64. }
  65. else
  66. {
  67. // Toast.makeText(getApplicationContext(), "第一次连接网络!", Toast.LENGTH_SHORT).show();
  68. System.out.println("第一次连接网络!");
  69. // 创建url对象
  70. URL url = new URL(path);
  71. // 获取HttpURLConnection对象
  72. HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
  73. // 设置请求方式
  74. httpURLConnection.setRequestMethod("GET");
  75. // 设置超时时间
  76. httpURLConnection.setReadTimeout(5000);
  77. // 获取服务器返回的状态码
  78. int code = httpURLConnection.getResponseCode();
  79. if (code == 200)
  80. {
  81. // 获取图片数据,不管什么数据,都是以流的形式返回
  82. InputStream in = httpURLConnection.getInputStream();
  83. // 缓存图片 谷歌给我们提供了一个缓存目录
  84. FileOutputStream fos = new FileOutputStream(file);
  85. int len = -1;
  86. byte buffer[] = new byte[1024]; // 1kB
  87. while((len = in.read(buffer)) != -1)
  88. {
  89. fos.write(buffer, 0, len);
  90. }
  91. // 关闭流
  92. fos.close();
  93. in.close();
  94. // 通过位图工厂,获取位图
  95. final Bitmap bitmap = BitmapFactory.decodeFile(file.getAbsolutePath());
  96. // 创建MSG 对象
  97. // Message msg = new Message();
  98. Message msg = Message.obtain(); // 使用Message的静态方法,可以减少对象的创建
  99. msg.obj = bitmap;
  100. handler.sendMessage(msg);
  101. }
  102. }
  103. }
  104. catch (Exception e)
  105. {
  106. e.printStackTrace();
  107. }
  108. }
  109. }.start();
  110. }
  111. }

安卓开发之cache 的使用(图片查看器案例)的更多相关文章

  1. Android 调整透明度的图片查看器

    本文以实例讲解了基于Android的可以调整透明度的图片查看器实现方法,具体如下:  main.xml部分代码如下: <?xml version="1.0" encoding ...

  2. wpf 仿QQ图片查看器

    参考博客 WPF下的仿QQ图片查看器 wpf图片查看器,支持鼠标滚动缩放拖拽 实现效果 主要参考的WPF下的仿QQ图片查看器,原博主只给出了部分代码. 没有完成的部分 1.右下角缩略图是原图不是缩略图 ...

  3. 发布两款JQ小插件(图片查看器 + 分类选择器),开源

    图片查看器,github地址:https://github.com/VaJoy/imgViewer 效果如下: 这款当初大概写了2小时,有点匆忙地赶出来的,使用的接口很简单: $.bindViewer ...

  4. wpf图片查看器,支持鼠标滚动缩放拖拽

    最近项目需要,要用到一个图片查看器,类似于windows自带的图片查看器那样,鼠标滚动可以缩放,可以拖拽图片,于是就写了这个简单的图片查看器. 前台代码: <Window x:Class=&qu ...

  5. 用JQ仿造礼德财富网的图片查看器

    现在就职于一家P2P平台,自然也会关注同行其它网站的前端技术,今天要仿造的是礼德内页的一个图片查看器效果.不过说白了,无论人人贷也好礼德财富也好,很多地方的前端都做的不尽如人意,比如忽略细节.缺乏交互 ...

  6. 基于jQuery的一个简单的图片查看器

    项目中自己diy了一个图片查看器.因为初始代码不是自己的,只是在上面改了一下也没有弄的很漂亮.等以后有时间了在重写一下样式和封装,作为备用的只是积累吧.如果有童鞋有用到,完全可以在此基础上改,比较容易 ...

  7. Objective-C ,ios,iphone开发基础:快速实现一个简单的图片查看器

    新建一个single view 工程: 关闭ARC , 在.xib视图文件上拖放一个UIImageView  两个UIButton ,一个UISlider ,布局如图. 并为他们连线, UIImage ...

  8. Window Phone 8 应用程序连接扩展图片中心,图片扩展,图片查看器

    WMAppManifest.xml <?xml version="1.0" encoding="utf-8"?> <Deployment xm ...

  9. js手写图片查看器(图片的缩放、旋转、拖拽)

    在做一次代码编辑任务中,要查看图片器.在时间允许的条件下,放弃了已经封装好的图片jq插件,现在自己手写js实现图片的缩放.旋转.推拽功能! 具体代码如下: <!DOCTYPE html> ...

随机推荐

  1. Flutter利用GridView实现网格的商品布局

    GridView.count 生成的是静态网格 效果: 代码: import 'package:flutter/material.dart'; void main() { runApp(MyApp() ...

  2. netty5心跳与阻塞性业务消息分发实例

    继续之前的例子(netty5心跳与业务消息分发实例),我们在NettyClientHandler把业务消息改为阻塞性的: package com.wlf.netty.nettyclient.handl ...

  3. 全面系统Python3入门+进阶-1-3 我为什么喜欢Python

    结束

  4. 报错:WARN [WorkerSender[myid=1]:QuorumCnxManager@584] - Cannot open channel to 2 at election address /x.x.x.x:3888

    报错背景: zookeeper安装完成之后,启动之后正常,但是查看log文件zookeeper.log时发现报错. 报错现象: -- ::, [myid:] - INFO [WorkerSender[ ...

  5. beego框架(golang)学习过滤器(实现restful请求)

    过滤器 在用beego做restful路由的时候,遇到了除了GTE.POST之外的HTTP请求,比如 PUT.PATCH.delete请求无法通过路由认证,报错误:405 METHOD NOT ALL ...

  6. eNSP配置基本与高级访问控制列表

    首先我们进行基本的acl控制 拓扑图如下所示 首先我们对路由器进行基本ip配置 并在路由器上设置ospf协议 添加相邻的网段 在路由器上运行了ospf协议后 使用display ip route-ta ...

  7. Appium移动自动化测试-----(二)安装 Android SDK

    安装Android SDK Android SDK(Software Development Kit,软件开发工具包)提供了 Android API 库和开发工具构建,测试和调试应用程序.简单来讲,A ...

  8. windows下大数据开发环境搭建(3)——Scala环境搭建

    一.所需环境 ·Java 8   二.下载Scala https://www.scala-lang.org/download/ 三.配置环境变量 SCALA_HOME: C:\scala Path: ...

  9. python selenium学习

    selenium是一个python模块,具有自动化模拟浏览器的功能 selenium的中文文档地址:http://selenium-python-zh.readthedocs.io/en/latest ...

  10. linux语句

    查看网卡 ip addr ifconfig