imageview显示网络图片,其实应该是一个很简单的问题,但是当你百度一下你会发现网上给出的答案其实并不能加载网络图片,原因是因为android4.0后请求网络资源不可以放在主线程中,需要另外在子线程中通过handler传递图片资源给imageview赋值。那么让我们看看改如何去做。
首先添加权限
<uses-permission android:name="android.permission.INTERNET"/>然后布局文件如下<LinearLayout
android:id="@+id/wb_linearlayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#7DB6E9"
android:orientation="horizontal">
<ImageView
android:id="@+id/wb2"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</LinearLayout>
创建Activity在oncreate函数中得到ImageView wb = (ImageView) findViewById(R.id.wb2);
//从远程action取数据 展示列表列
class GetbitmapThread extends Thread {
private String url;
public GetbitmapThread(String url){
this.url = url;
}
@Override
public void run() {
URL myFileUrl = null;
Bitmap bitmap = null;
try {
myFileUrl = new URL(url);
} catch (MalformedURLException e) {
e.printStackTrace();
}
try {
HttpURLConnection conn = (HttpURLConnection) myFileUrl
.openConnection();
conn.setConnectTimeout(6000);
conn.setDoInput(true);
conn.setUseCaches(false);
//conn.setRequestMethod("POST");
conn.setRequestProperty("connection", "keep-alive");
//这是自己的加密格式,正常可以去掉
conn.setRequestProperty("Platform-Agent",
"AppleWebKit/537.36 (KHTML, like Gecko)");
conn.setChunkedStreamingMode(0);
conn.connect();
InputStream is = conn.getInputStream();
bitmap = BitmapFactory.decodeStream(is);
Message msg = new Message();
msg.what = 1;
msg.obj = bitmap;
//向handler发消息
handler.sendMessage(msg);
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
/**
* 用Handler来更新UI
*/
private Handler handler = new Handler(){
@Override
public void handleMessage(Message msg){
try{
if(msg.what==1){
Bitmap bm = (Bitmap)msg.obj;
wb .setImageBitmap(bm);
}
}
catch(Exception e){
//我看看是不是这块有问题 catch一下
}
}};
}
url传网络图片的地址。这样就可以显示网络图片。