HarmonyOS鸿蒙Next中为什么预览器可以正常显示网络图片,但是模拟器和真机不行
HarmonyOS鸿蒙Next中为什么预览器可以正常显示网络图片,但是模拟器和真机不行

一个网络图片,预览器可以正常显示,但是模拟器和真机都不显示,这是怎么回事啊,也申请网络权限了
我是把图片直接放到阿里云服务器上了,图片地址如下:https://alizxk.top/images/%E7%BD%97%E5%B0%BC%C2%B7%E5%A5%A5%E6%B2%99%E5%88%A9%E6%96%87.png
更多关于HarmonyOS鸿蒙Next中为什么预览器可以正常显示网络图片,但是模拟器和真机不行的实战教程也可以访问 https://www.itying.com/category-93-b0.html
你好,可以使用 onError 回调查看加载错误信息。根据提供的图片地址,得到错误:
response code 2300060, msg from netStack: Invalid SSL peer certificate or SSH remote key
Image('https://alizxk.top/images/%E7%BD%97%E5%B0%BC%C2%B7%E5%A5%A5%E6%B2%99%E5%88%A9%E6%96%87.png')
.width('100%')
.onError(e => {
// error: Http task of url https://alizxk.top/images/xxx.png failed,
// response code 2300060, msg from netStack: Invalid SSL peer certificate or SSH remote key
console.log(e.message)
})
2300060 远程服务器SSL证书或SSH密钥不正确
错误信息:Invalid SSL peer certificate or SSH remote key.
错误描述:远程服务器SSL证书或SSH密钥不正确。
可能原因:无法校验服务器身份,例如证书过期。
处理步骤:建议参考tls客户端证书验证流程自排查问题原因。
1、建议换一个ssl证书
2、还可以把图片下载之后再显示,使用 skip 跳过验证远端服务器身份流程:
import { image } from '@kit.ImageKit';
import { BusinessError } from '@kit.BasicServicesKit';
import { rcp } from '@kit.RemoteCommunicationKit';
@Entry
@Component
struct Index {
@State pixelMap: PixelMap | undefined = undefined;
@State imgUrl: string =
'https://alizxk.top/images/%E7%BD%97%E5%B0%BC%C2%B7%E5%A5%A5%E6%B2%99%E5%88%A9%E6%96%87.png'; // 替换在线url图片
build() {
Column() {
Button('下载图片').onClick(() => {
const session = rcp.createSession();
const request = new rcp.Request(this.imgUrl, 'GET');
request.configuration = {
security: {
// `skip`表示跳过验证远端服务器身份流程,值固定为`skip`字符串。
remoteValidation: 'skip',
},
};
session.fetch(request).then(async (rep: rcp.Response) => {
console.info(`Response succeeded: ${rep}`);
this.pixelMap = await image.createImageSource(rep.body as ArrayBuffer).createPixelMap();
}).catch((err: BusinessError) => {
console.error(`Response err: Code is ${err.code}, message is ${err.message}`);
});
});
Text('下载图片后显示');
Image(this.pixelMap).width('100%');
}
.width('100%')
.height('100%');
}
}
更多关于HarmonyOS鸿蒙Next中为什么预览器可以正常显示网络图片,但是模拟器和真机不行的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
我在原代码上加 onError 方法没有报错信息,用你后面的代码,先下载再显示就没问题了,我先这样用着,感谢!
楼主,你得模拟器怎么没有链接网络呀,就是右上角不应该有一个wifi链接的图标吗?

模拟器不一直都是这样吗,我从来没见过WiFi图标呀,我其他的都能从网络上拿到数据,唯独这个不行

我的模拟器是这样的,你可以看看是不是这个原因。
我的没有WiFi图标也能获取到数据,跟这个没关系,你连的应该是虚拟WiFi
安装下面的方法试下

在module.json5 中添加如下代码
"requestPermissions": [
{
"name": "ohos.permission.INTERNET"
}
]
如有帮助给个采纳谢谢
你换一张百度上的图试试 可不可以 , 我访问了你oss 的地址 貌似过期了
有要学HarmonyOS AI的同学吗,联系我:https://www.itying.com/goods-1206.html,
百度的没问题,就是直接放在服务器的目录里不行
预览器能显示不代表模拟器/真机运行时一定能加载。建议先给 Image 加 onError,把具体错误码和 message 打出来,再按错误类型排查。
几个高频点:1. module.json5 里确认声明了 ohos.permission.INTERNET;2. 在模拟器/真机浏览器里直接打开同一个图片 URL,确认设备侧网络可达;3. URL 里有中文文件名时要保证完整百分号编码,不要在代码里二次解码或拼出非法 URL;4. 如果 onError 提示 SSL certificate/remote key 问题,Image 组件不能直接配置自定义 CA,建议先用网络请求/rcp 下载到应用沙箱,再用本地文件加载;5. 如果服务端返回 403,要检查 OSS/服务器是否限制 Referer、User-Agent 或外链访问。
所以可以先把 Image($url).onError(…) 的错误信息贴到排查里,通常比只看“真机不显示”更快定位。
我试一下 谢谢
看你代码应该是没有问题的啊。重启试试吧,或者换个公共资源图片看看
我试过两个图片,一个放在阿里云的OSS里,可以正常访问,但是直接放在服务器上的就不行
可以试下模拟器有没有网络,打开模拟器的浏览器访问图片地址试试。如果没有网络可能是PC设置了代理,可以关闭代理重启模拟器试试。
模拟器已经是无代理了,没有用
模拟器是不是没有设置网络权限呢
网络权限我设置了,还是不行
预览器运行于开发机本地网络环境,默认允许HTTP访问且无需额外配置;模拟器和真机需在module.json5中添加ohos.permission.INTERNET权限,并在resources/base/profile/network_security_config.json中设置cleartextTrafficPermitted为true以支持HTTP图片(若URL为HTTP)。同时检查真机/模拟器网络连接及代理设置。
由于预览器基于Web引擎,会自动对URL中的非ASCII字符(如中文)进行编码处理,而模拟器和真机上的Image组件不会自动编码。你的图片链接中包含中文文件名“罗尼·奥沙利文.png”,在模拟器和真机上直接使用该链接会导致请求的URL不符合规范,服务器无法正确识别,从而加载失败。对图片地址使用encodeURI处理中文部分即可正常显示。


