Android Studio中ImageView无法加载图片 报NetworkOnMainThreadException错误
问题解决方案
异常触发原因
抛出android.os.NetworkOnMainThreadException的核心原因是,Android 3.0及以上系统为了避免阻塞UI导致页面卡顿,强制禁止在主线程执行耗时网络操作,你当前的图片下载逻辑直接运行在主线程被系统拦截,因此无法完成图片下载,也无法更新ImageView显示内容。
可落地的解决方法
- 方案1(最推荐):使用成熟第三方图片加载库
这类库已经内置了线程调度、内存/磁盘缓存、异常兼容等能力,无需自行处理异步逻辑和边界问题,常用的有Glide、Picasso,以Glide为例,核心代码如下:// 从EditText中读取图片链接 String imageUrl = editText.getText().toString().trim(); // 直接加载到目标ImageView Glide.with(context) .load(imageUrl) .into(targetImageView); - 方案2:自行实现异步下载逻辑
如果你需要自己完成图片下载的全流程,必须将网络请求逻辑放到子线程执行,下载完成后再切回主线程更新UI:- 子线程执行HTTP请求下载图片,将返回结果转为Bitmap对象
- 通过Handler(Java环境)或者协程UI调度器(Kotlin环境)切回主线程,调用
imageView.setImageBitmap(bitmap)更新控件显示
- 额外注意事项
- 必须在
AndroidManifest.xml中添加网络权限:<uses-permission android:name="android.permission.INTERNET" /> - 加载前校验从EditText获取的URL合法性,避免空值、非法格式导致的额外崩溃
- 必须在
内容的提问来源于stack exchange,提问作者trikimg
相关产品推荐
相关产品推荐

