不叨叨,直接上代码,特别注意,联网获取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;
}
}