Unity 之 使用UnityWebRequest.Get(”0“)结果得到”Accept“

412 阅读1分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

出现问题

在使用下面这个协程时,传值是“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... 
 }