MainActivity代码:
package com.demo.save; import android.graphics.Bitmap; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.widget.ImageView; import butterknife.ButterKnife; import butterknife.InjectView; public class MainActivity extends AppCompatActivity { @InjectView(R.id.imageview) ImageView imageview; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ButterKnife.inject(this); if (Task.getDiskBitmap(Task.imagePath) == null) { loadImg(Task.path); } else { imageview.setImageBitmap(Task.getDiskBitmap(Task.imagePath)); } } private void loadImg(String url) { Task task = new Task(new Task.ImageCallBack() { @Override public void callBitmap(Bitmap bitmap) { if (bitmap != null) { imageview.setImageBitmap(bitmap); } } }); //执行图片请求 task.execute(url); } } Task 网络获取数据类:package com.demo.save; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.AsyncTask; import android.util.Log; import android.widget.Toast; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.URL; /** * Created by yafr1hz1 on 2017/9/7. */ public class Task extends AsyncTask<String, Void, Bitmap> { public static String path = "http://139.224.104.4:8085/iknow/upload/product/1/2017/8/18/1014148680.jpg"; private String fileName; public static String imagePath; /** * 定义一个图片的接口回调 */ public interface ImageCallBack { void callBitmap(Bitmap bitmap); } //定义变量记住调用者所传递进来的回调监听对象 private ImageCallBack imageCallBack; //构造方法 public Task(ImageCallBack imageCallBack) { this.imageCallBack = imageCallBack; } @Override protected Bitmap doInBackground(String... params) { try { String path = params[0]; URL url = new URL(path); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("GET"); connection.setConnectTimeout(5 * 1000); connection.setReadTimeout(2 * 1000); //服务器响应 int code = connection.getResponseCode(); if (code == HttpURLConnection.HTTP_OK) { //判断服务器是否连接成功并相应 // InputStream is = connection.getInputStream(); loadImageFromNetwork(MyApplication.getContext(), path); //将图片流转化成Bitmap位图,返回 return BitmapFactory.decodeStream(is); } } catch (Exception e) { Log.d("网络错误----", e.toString()); } return null; } public void loadImageFromNetwork(Context context, String imageUrl) { // 获取url中图片的文件名与后缀 if (imageUrl != null && imageUrl.length() != 0) { fileName = imageUrl.substring(imageUrl.lastIndexOf("/") + 1); } // 图片在手机本地的存放路径, 注意:fileName为空的情况 imagePath = context.getCacheDir() + "/" + fileName; File file = new File(context.getCacheDir(), fileName); // 保存文件 if (!file.exists() && !file.isDirectory()) { try { // 可以在这里通过文件名来判断,是否本地有此图片 FileOutputStream fos = new FileOutputStream(file); InputStream is = new URL(imageUrl).openStream(); int data = is.read(); while (data != -1) { fos.write(data); data = is.read(); } fos.close(); is.close(); } catch (IOException e) { Log.d("test", e.getMessage()); } } else { Log.d("test", "file.exists()文件存在,本地获取"); } Log.d("文件路径-----", imagePath); } //读取本地图片 参数: 文件路径 public static Bitmap getDiskBitmap(String pathString) { Bitmap bitmap = null; try { bitmap = BitmapFactory.decodeFile(pathString); } catch (Exception e) { } return bitmap; } @Override protected void onPostExecute(Bitmap bitmap) { super.onPostExecute(bitmap); if (fileName == null) { Toast.makeText(MyApplication.getContext(),"请检查网络状态后重试",Toast.LENGTH_LONG).show(); } if (bitmap != null) { //设置图片 回调回去 imageCallBack.callBitmap(bitmap); } } }
Application :package com.demo.save; import android.app.Application; import android.content.Context; /** * Created by yafr1hz1 on 2017/9/7. */ public class MyApplication extends Application { private static Context context; @Override public void onCreate() { super.onCreate(); context = getApplicationContext(); } /** * 获取全局上下文 */ public static Context getContext() { return context; } }注:在manifest文件中<application>节点下配置添加网络访问权限android:name="MyApplication"
布局文件: (喜欢的话可以自己添加一个button,点击button后加载图片,这里是在Activity创建之后直接加载图片的)<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.demo.save.MainActivity" > <ImageView android:id="@+id/imageview" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" /> </RelativeLayout>好了,到这里结束了.第一篇博客!