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();
}
}

最新文章

  1. 屌丝giser成长记-大学篇
  2. Pyqt 获取windows系统中已安装软件列表
  3. mysql忘记密码重置(mac)
  4. 常用分类列表wp_list_categories()
  5. netty中LengthFieldBasedFrameDecoder的使用
  6. xml bug
  7. 高效的数组去重(js)
  8. ubuntu 安装Matlab 解决显示中文乱码
  9. apache禁止公网IP访问的配置
  10. web项目jsp出现The superclass javax.servlet.http.HttpServlet was not found on the Java Build Path错误
  11. 写出优雅又地道的pythonic代码(转自网络)
  12. 04springMVC结构,mvc模式,spring-mvc流程,spring-mvc的第一个例子,三种handlerMapping,几种控制器,springmvc基于注解的开发,文件上传,拦截器,s
  13. eShopOnWeb 知多少
  14. 第45章 工具 - Identity Server 4 中文文档(v1.0.0)
  15. Ridis
  16. so插件化
  17. mui longtap 事件无效
  18. 利用MATLAB截取一张复杂图片中想要的区域
  19. 持续集成之三:搭建Maven私服Nexus
  20. Storm集成Kafka的Trident实现

热门文章

  1. c++调用动态库失败解决办法
  2. 我的一个PLSQL函数 先查询再插入数据库的函数 动态SQL拼接查询条件、通用游标、记录定义(封装部分查询字段并赋值给游标)、insert select 序列、常量【我】
  3. 算法习题---5.11邮件传输代理的交互(Uva814)
  4. Linux下压力测试命令ab
  5. Python手册 3.7
  6. LeetCode_263. Ugly Number
  7. (十三)class文件结构:常量池(转)
  8. 创建Dockerfile
  9. 微软3389远程漏洞CVE-2019-0708批量检测工具
  10. PHP curl模拟ip和来源进行访问