android imageview加载网络图片没显示

西牛贺州的耍猴老道 2016-04-12 09:49:56
package study_imageput.com.study_apktointent;

import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.widget.ImageView;

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

public class MainActivity extends Activity {
//定义一个图片显示控件
private ImageView imageView;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imageView = (ImageView) this.findViewById(R.id.ivPic);
String url = "http://images.cnitblog.com/blog/430074/201302/01220037-4e6a57c1199748fea9f8391e7e0548d7.jpg";
setPicBitmap(imageView, url);

}

public static void setPicBitmap(final ImageView ivPic,final String pic_url){

new Thread(new Runnable() {
@Override
public void run() {
try{
HttpURLConnection conn = (HttpURLConnection) new URL(pic_url).openConnection();
conn.connect();
InputStream is = conn.getInputStream();
Bitmap bitmap =BitmapFactory.decodeStream(is);
ivPic.setImageBitmap(bitmap);
is.close();
} catch (Exception e){
e.printStackTrace();
}
}
});
}
}
用这样的方式加载出的图片是空白
...全文
735 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
ao929929fei 2016-04-19
  • 打赏
  • 举报
回复
4楼可以借鉴,如果图片较多需要管理下,我建议是先把图片下载下来,保存在缓存中或者磁盘中,然后刷新
JPF1024 2016-04-18
  • 打赏
  • 举报
回复
http://www.tuicool.com/articles/b2IN7zM 参考这个、。 用volley 的 NetworkImageView更方便。
欣欣欣1996 2016-04-14
  • 打赏
  • 举报
回复
在子线程里只能进行网络请求的操作,但是子线程没有刷新ui的权限,所以你可以利用主线程带有的handler机制来刷先ui显示,我帮你改的代码:
public class MainActivity extends Activity {

private Context mContext;
private ImageView imageView;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mContext = this;
imageView = (ImageView) this.findViewById(R.id.ivPic);
String url = "http://images.cnitblog.com/blog/430074/201302/01220037-4e6a57c1199748fea9f8391e7e0548d7.jpg";
setPicBitmap(imageView, url);
}

// 刷新ui
private Handler handler = new Handler() {

public void handleMessage(Message message) {

Bitmap bitmap = (Bitmap) message.obj;
imageView.setImageBitmap(bitmap);

}
};

public void setPicBitmap(final ImageView ivPic, final String pic_url) {

new Thread(new Runnable() {
@Override
public void run() {
try {
HttpURLConnection conn = (HttpURLConnection) new URL(
pic_url).openConnection();

// 设置请求方式和超时时间
conn.setRequestMethod("GET");
conn.setConnectTimeout(1000 * 10);
conn.connect();

int code = conn.getResponseCode();
if (code == 200) {
InputStream is = conn.getInputStream();
Bitmap bitmap = BitmapFactory.decodeStream(is);

//利用消息的方式把数据传送给handler
Message msg = handler.obtainMessage();
msg.obj = bitmap;
handler.sendMessage(msg);
} else {
Toast.makeText(mContext, "请求失败", Toast.LENGTH_SHORT)
.show();
}

} catch (Exception e) {
e.printStackTrace();
}
}
}).start();
}
}

activity_main.xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/LinearLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity" >

<ImageView
android:id="@+id/ivPic"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_gravity="center"/>

</LinearLayout>


最后显示的结果是这样的:

画虎烂 2016-04-12
  • 打赏
  • 举报
回复
1、ivPic.setImageBitmap(bitmap)这句话不能在非UI线程下使用,你可以将它写在runOnUiThread 2、加载网络图片有很多开源库,都带有缓存,比如,fresco、ImageLoader,不建议自己实现
chengdongzaq 2016-04-12
  • 打赏
  • 举报
回复
你这是在子线程更新ui啊,发一个消息,让主线程更新就OK了
jhdxhj 2016-04-12
  • 打赏
  • 举报
回复
加载显示网络图片,应该需要先把图片下载下来存放到本地,再显示,你确定你把网络图片下载下来了吗?

80,472

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧