URL装为Bitmap对象(自己写流)

245 阅读1分钟

不叨叨,直接上代码,特别注意,联网获取url是耗时操作,要在子线程中进行(new thread( run()).start)!!

package com.example.sj.urlbitmap;

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.widget.ImageView;

import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;

public class MainActivity extends AppCompatActivity {
    private ImageView mImg;
    public static String URL = "http://pic17.nipic.com/20111108/3484168_101404023000_2.jpg";
    private Bitmap mBitmap;
    private Handler mHandler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            mImg.setImageBitmap(mBitmap);//hangdler是主线程做界面展示
        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mImg = (ImageView) findViewById(R.id.img);
        getBitmap(URL);
    }

    private void getBitmap(final String path) {

        new Thread() {
            @Override
            public void run() {
                try {//子线程处理联网耗时操作
                    URL url = new URL(path);
                    HttpURLConnection conn = (HttpURLConnection) url.openConnection();
                    InputStream is = conn.getInputStream();
                    ByteArrayOutputStream baos = new ByteArrayOutputStream();
                    byte[] buffer = new byte[1024];
                    int len = 0;

                    while ((len = is.read(buffer)) != -1) {
                        baos.write(buffer, 0, len);
                    }
                    byte[] result = baos.toByteArray();
                    System.out.println("length--------------------->" + result.length);
                    mBitmap = BitmapFactory.decodeByteArray(result, 0, result.length);

                    mHandler.sendEmptyMessage(0);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }.start();

//        Bitmap bm = null;
//        try {
//            URL iconUrl = new URL(url);
//            URLConnection conn = iconUrl.openConnection();
//            HttpURLConnection http = (HttpURLConnection) conn;
//
//            int length = http.getContentLength();
//
//            conn.connect();
//            // 获得图像的字符流
//            InputStream is = conn.getInputStream();
//            BufferedInputStream bis = new BufferedInputStream(is, length);
//            bm = BitmapFactory.decodeStream(bis);
//            bis.close();
//            is.close();// 关闭流
//        }
//        catch (Exception e) {
//            e.printStackTrace();
//        }
//        return bm;
    }
}