Unity 之 使用UnityWebRequest.Get(“0“)结果得到“Accept“的问题记录

Posted 陈言必行

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity 之 使用UnityWebRequest.Get(“0“)结果得到“Accept“的问题记录相关的知识,希望对你有一定的参考价值。

Unity 之 使用UnityWebRequest.Get结果得到"Accept"的问题记录

一,出现问题

在使用下面这个协程时,传值是“0” ,正常的测试结果request.isNetworkError为True 结束协程:

报错代码:

IEnumerator GetUrlData(string url)
{
      Debug.Log("GetADImageList url: " + url);
      
      UnityWebRequest request = UnityWebRequest.Get(url);
      yield return request.SendWebRequest();
      
      if (request.isHttpError || request.isNetworkError)
      {
          yield break;
      }
      if (string.IsNullOrEmpty(request.downloadHandler.text))
      {
          yield break;
      }
      JsonData data = JsonMapper.ToObject(request.downloadHandler.text);
        
      // todo... 
 }

二,报错信息:

在真机Oppo R9 上出现的问题,在其他机型的手机没有出现这个问题:

>GetADImageList url: 0

>GetADImageList IsNullOrEmpty Accept

>输出condition:JsonException: Invalid character 'A' in input string,输出stackTrace:LitJson.Lexer.NextToken () (at <00000000000000000000000000000000>:0)
    LitJson.JsonReader.ReadToken () (at <00000000000000000000000000000000>:0)
    LitJson.JsonReader.Read () (at <00000000000000000000000000000000>:0)
    LitJson.JsonMapper.ReadValue (LitJson.WrapperFactory factory, LitJson.JsonReader reader) (at <00000000000000000000000000000000>:0)
    LitJson.JsonMapper.ToObject (System.String json) (at <00000000000000000000000000000000>:0)
    ADSDK+<GetADImageList>d__104.MoveNext () (at <00000000000000000000000000000000>:0)
    UnityEngine.SetupCoroutine.InvokeMoveNext (System.Collections.IEnumerator enumerator, System.IntPtr returnValueAddress) (at <00000000000000000000000000000000>:0)

三,修正代码:

后来没有分析出原因,也没有找到解决方案,只能在后面使用获得结果的时候加个异常捕获:

IEnumerator GetUrlData(string url)
{
      Debug.Log("GetADImageList url: " + url);
      UnityWebRequest request = UnityWebRequest.Get(url);
      yield return request.SendWebRequest();
      if (request.isHttpError || request.isNetworkError)
      {
          yield break;
      }
      if (string.IsNullOrEmpty(request.downloadHandler.text))
      {
          yield break;
      }
      JsonData data;
      try
      {
          data = JsonMapper.ToObject(request.downloadHandler.text);
      }
      catch (Exception e)
      {
          Debug.Log("GetADImageList request.downloadHandler.text: " + request.downloadHandler.text);
          throw e;
      }
      // todo... 
 }

以上是关于Unity 之 使用UnityWebRequest.Get(“0“)结果得到“Accept“的问题记录的主要内容,如果未能解决你的问题,请参考以下文章

Unity - UnityWebRequest使用小记

HttpClient 和 Unity 的 UnityWebRequest/WWW API 的区别

unity unitywebrequest 好用么

Unity Android 使用UnityWebRequest Post 数据后,没有获得服务器返回的数据

Unity 使用UnityWebRequest下载超大资源,实现断点续传和分段下载。

U3D客户端框架之实现基于UnityWebRequest的Http服务 实现HttpCallBackArgs参数类HttpRoutine访问器HttpManager管理器