package com.lidaochen.test; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.util.Base64; import android.view.View; import android.widget.EditText; import android.widget.ImageView; 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; @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()); // 这个API不管你在什么位置上调用,action都运行在UI线程里 runOnUiThread(new Runnable() { @Override public void run() { iv_pic.setImageBitmap(cacheBitmap); } }); } 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()); // 这个API不管你在什么位置上调用,action都运行在UI线程里 runOnUiThread(new Runnable() { @Override public void run() { iv_pic.setImageBitmap(bitmap); } }); } } } catch (Exception e) { e.printStackTrace(); } } }.start(); } }