Kotlin 给ImageView动态设置网络地址

 1 // 把传过来的路径转成url
 2 var myurl = URL(item.toString())
 3 // 获取链接
 4 var conn = myurl.openConnection()
 5 // 设置超时时间为 6s
 6 conn.connectTimeout = 6000
 7 conn.doInput = true
 8 // 不使用缓存
 9 conn.useCaches = false
10 // 开始连接
11 conn.connect()
12 // 得到从服务器端发回的数据
13 var imgbit = conn.getInputStream()
14 // 使用工厂把网络的输入流生产Bitmap
15 var bmp = BitmapFactory.decodeStream(imgbit)
16 // 关闭
17 imgbit.close()

单纯这样写,在运行的时候会抛出android.os.NetworkOnMainThreadException异常,字面意思是主线程的网络异常

经查询后,一个APP如果在主线程中请求网络操作,将会抛出此异常。Android这个设计是为了防止网络请求时间过长而导致界面假死的情况发生。

所以我们让他在子线程中运行就可以了

doAsync {
                // 把传过来的路径转成url
                var myurl = URL(item.toString())
                // 获取链接
                var conn = myurl.openConnection()
                // 设置超时时间为 6s
                conn.connectTimeout = 6000
                conn.doInput = true
                // 不使用缓存
                conn.useCaches = false
                // 开始连接
                conn.connect()
                // 得到从服务器端发回的数据
                var imgbit = conn.getInputStream()
                // 使用工厂把网络的输入流生产Bitmap
                var bmp = BitmapFactory.decodeStream(imgbit)
                // 关闭
                imgbit.close()

                uiThread {
                    // 动态给imageview设置图片
                    viewHolder.imgItem.setImageBitmap(bmp)
                }
            }

就能完美运行了!

转载于:https://www.cnblogs.com/bluexuchun/p/10280870.html

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值