安卓开发之cache 的使用(图片查看器案例)
- package com.lidaochen.test;
- import android.graphics.Bitmap;
- import android.graphics.BitmapFactory;
- import android.os.Bundle;
- import android.os.Handler;
- 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 EditText et_path;
- private ImageView iv_pic;
- // 创建handler对象
- public Handler handler = new Handler()
- {
- @Override
- public void handleMessage(Message msg) {
- super.handleMessage(msg);
- Bitmap bitmap = (Bitmap)msg.obj;
- // 设置图片到ImageView
- iv_pic.setImageBitmap(bitmap);
- }
- };
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- // 找到 ImageView 和 EditText控件
- et_path = (EditText)findViewById(R.id.et_path);
- iv_pic = (ImageView)findViewById(R.id.iv_pic);
- }
- public void click(View v)
- {
- new Thread()
- {
- public void 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("使用缓存图片!");
- final Bitmap cacheBitmap = BitmapFactory.decodeFile(file.getAbsolutePath());
- // 把cacheBitmap显示到ImageView上
- Message msg = Message.obtain(); // 使用Message的静态方法,可以减少对象的创建
- msg.obj = cacheBitmap;
- handler.sendMessage(msg);
- }
- else
- {
- // Toast.makeText(getApplicationContext(), "第一次连接网络!", Toast.LENGTH_SHORT).show();
- System.out.println("第一次连接网络!");
- // 创建url对象
- URL url = new URL(path);
- // 获取HttpURLConnection对象
- HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
- // 设置请求方式
- httpURLConnection.setRequestMethod("GET");
- // 设置超时时间
- httpURLConnection.setReadTimeout(5000);
- // 获取服务器返回的状态码
- int code = httpURLConnection.getResponseCode();
- if (code == 200)
- {
- // 获取图片数据,不管什么数据,都是以流的形式返回
- InputStream in = httpURLConnection.getInputStream();
- // 缓存图片 谷歌给我们提供了一个缓存目录
- FileOutputStream fos = new FileOutputStream(file);
- int len = -1;
- byte buffer[] = new byte[1024]; // 1kB
- while((len = in.read(buffer)) != -1)
- {
- fos.write(buffer, 0, len);
- }
- // 关闭流
- fos.close();
- in.close();
- // 通过位图工厂,获取位图
- final Bitmap bitmap = BitmapFactory.decodeFile(file.getAbsolutePath());
- // 创建MSG 对象
- // Message msg = new Message();
- Message msg = Message.obtain(); // 使用Message的静态方法,可以减少对象的创建
- msg.obj = bitmap;
- handler.sendMessage(msg);
- }
- }
- }
- catch (Exception e)
- {
- e.printStackTrace();
- }
- }
- }.start();
- }
- }
安卓开发之cache 的使用(图片查看器案例)的更多相关文章
- Android 调整透明度的图片查看器
本文以实例讲解了基于Android的可以调整透明度的图片查看器实现方法,具体如下: main.xml部分代码如下: <?xml version="1.0" encoding ...
- wpf 仿QQ图片查看器
参考博客 WPF下的仿QQ图片查看器 wpf图片查看器,支持鼠标滚动缩放拖拽 实现效果 主要参考的WPF下的仿QQ图片查看器,原博主只给出了部分代码. 没有完成的部分 1.右下角缩略图是原图不是缩略图 ...
- 发布两款JQ小插件(图片查看器 + 分类选择器),开源
图片查看器,github地址:https://github.com/VaJoy/imgViewer 效果如下: 这款当初大概写了2小时,有点匆忙地赶出来的,使用的接口很简单: $.bindViewer ...
- wpf图片查看器,支持鼠标滚动缩放拖拽
最近项目需要,要用到一个图片查看器,类似于windows自带的图片查看器那样,鼠标滚动可以缩放,可以拖拽图片,于是就写了这个简单的图片查看器. 前台代码: <Window x:Class=&qu ...
- 用JQ仿造礼德财富网的图片查看器
现在就职于一家P2P平台,自然也会关注同行其它网站的前端技术,今天要仿造的是礼德内页的一个图片查看器效果.不过说白了,无论人人贷也好礼德财富也好,很多地方的前端都做的不尽如人意,比如忽略细节.缺乏交互 ...
- 基于jQuery的一个简单的图片查看器
项目中自己diy了一个图片查看器.因为初始代码不是自己的,只是在上面改了一下也没有弄的很漂亮.等以后有时间了在重写一下样式和封装,作为备用的只是积累吧.如果有童鞋有用到,完全可以在此基础上改,比较容易 ...
- Objective-C ,ios,iphone开发基础:快速实现一个简单的图片查看器
新建一个single view 工程: 关闭ARC , 在.xib视图文件上拖放一个UIImageView 两个UIButton ,一个UISlider ,布局如图. 并为他们连线, UIImage ...
- Window Phone 8 应用程序连接扩展图片中心,图片扩展,图片查看器
WMAppManifest.xml <?xml version="1.0" encoding="utf-8"?> <Deployment xm ...
- js手写图片查看器(图片的缩放、旋转、拖拽)
在做一次代码编辑任务中,要查看图片器.在时间允许的条件下,放弃了已经封装好的图片jq插件,现在自己手写js实现图片的缩放.旋转.推拽功能! 具体代码如下: <!DOCTYPE html> ...
随机推荐
- Flutter利用GridView实现网格的商品布局
GridView.count 生成的是静态网格 效果: 代码: import 'package:flutter/material.dart'; void main() { runApp(MyApp() ...
- netty5心跳与阻塞性业务消息分发实例
继续之前的例子(netty5心跳与业务消息分发实例),我们在NettyClientHandler把业务消息改为阻塞性的: package com.wlf.netty.nettyclient.handl ...
- 全面系统Python3入门+进阶-1-3 我为什么喜欢Python
结束
- 报错: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[ ...
- beego框架(golang)学习过滤器(实现restful请求)
过滤器 在用beego做restful路由的时候,遇到了除了GTE.POST之外的HTTP请求,比如 PUT.PATCH.delete请求无法通过路由认证,报错误:405 METHOD NOT ALL ...
- eNSP配置基本与高级访问控制列表
首先我们进行基本的acl控制 拓扑图如下所示 首先我们对路由器进行基本ip配置 并在路由器上设置ospf协议 添加相邻的网段 在路由器上运行了ospf协议后 使用display ip route-ta ...
- Appium移动自动化测试-----(二)安装 Android SDK
安装Android SDK Android SDK(Software Development Kit,软件开发工具包)提供了 Android API 库和开发工具构建,测试和调试应用程序.简单来讲,A ...
- windows下大数据开发环境搭建(3)——Scala环境搭建
一.所需环境 ·Java 8 二.下载Scala https://www.scala-lang.org/download/ 三.配置环境变量 SCALA_HOME: C:\scala Path: ...
- python selenium学习
selenium是一个python模块,具有自动化模拟浏览器的功能 selenium的中文文档地址:http://selenium-python-zh.readthedocs.io/en/latest ...
- linux语句
查看网卡 ip addr ifconfig