Android 使用URL下載圖片到本地並顯示
阿新 • • 發佈:2019-02-04
package com.example.kirito.myapplication.testhttp; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Environment; import android.os.Handler; import android.util.Log; import android.widget.ImageView; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import java.util.Calendar; /** * Created by kirito on 2016.10.24. */ public class HttpImgThread extends Thread { private Handler handler; private ImageView iv; private String strurl; private static final String TAG = "HttpImgThread"; public HttpImgThread (Handler handler,ImageView iv,String strurl){ this.handler = handler; this.iv = iv; this.strurl = strurl; } @Override public void run() { URL url = null; HttpURLConnection con = null; try { url = new URL(strurl); con = (HttpURLConnection) url.openConnection(); con.setRequestMethod("GET"); con.setReadTimeout(5000); con.setDoInput(true); //InputStream in = con.getInputStream(); File parent = Environment.getExternalStorageDirectory(); File file = new File(parent,String.valueOf(System.currentTimeMillis())); FileOutputStream fos = new FileOutputStream(file); InputStream in = con.getInputStream(); Log.e(TAG, "run: path---"+file.getAbsolutePath() ); byte ch[] = new byte[2 * 1024]; int len; if (fos != null){ while ((len = in.read(ch)) != -1){ fos.write(ch,0,len); } in.close(); fos.close(); } /*BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream())); BufferedWriter bw = null; String s; while ((s = br.readLine()) != null){ bw = new BufferedWriter(new OutputStreamWriter(fos)); //以字串的形式寫入資料,無法讀取圖片 bw.write(s); } br.close(); bw.close();*/ final Bitmap bitmap = BitmapFactory.decodeFile(file.getAbsolutePath()); handler.post(new Runnable() { @Override public void run() { if (bitmap != null){ iv.setImageBitmap(bitmap); } } }); } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }