Unity调用www.downloadHandler.data报NullReferenceException空引用错误如何解决?
错误触发原因
- 核心原因是直接调用
UnityWebRequest的无额外参数构造函数时,Unity不会自动为实例初始化downloadHandler属性,该属性默认值为null,直接访问downloadHandler.data就会触发空引用异常。 - 额外潜在原因:未对请求结果做校验,就算配置了
downloadHandler,如果请求因网络错误、路径非法、服务端报错等问题失败,也可能出现downloadHandler未正常赋值、或data为空的情况。
修复方案
推荐两种可行的修复写法,同时增加异常校验逻辑:
方案1:使用Unity封装的静态请求方法(更简便)
UnityWebRequest.Get静态方法会自动初始化DownloadHandlerBuffer,无需手动配置:
private IEnumerator LoadBytes(string path, System.Action<byte[]> action) { using (UnityWebRequest www = UnityWebRequest.Get(path)) { yield return www.SendWebRequest(); // 先校验请求是否成功 if (www.result == UnityWebRequest.Result.Success) { action?.Invoke(www.downloadHandler.data); } else { // 可根据需求添加错误处理逻辑,比如回调传null、打印错误 Debug.LogError($"请求失败:{www.error}"); action?.Invoke(null); } } }
方案2:手动为原生构造的实例添加DownloadHandler
如果需要使用自定义构造逻辑,手动给downloadHandler赋值即可:
private IEnumerator LoadBytes(string path, System.Action<byte[]> action) { using (UnityWebRequest www = new UnityWebRequest(path)) { // 手动添加DownloadHandler www.downloadHandler = new DownloadHandlerBuffer(); yield return www.SendWebRequest(); if (www.result == UnityWebRequest.Result.Success) { action?.Invoke(www.downloadHandler.data); } else { Debug.LogError($"请求失败:{www.error}"); action?.Invoke(null); } } }
内容的提问来源于stack exchange,提问作者Arthur Mini
相关产品推荐
相关产品推荐

