ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [c#] NullReferenceException: Object reference not set to an instance of an object webrequest
    unity/c# 에러 2022. 10. 26. 09:44

     

    NullReferenceException: Object reference not set to an instance of an object webrequest

     

    외부 서버에서 스크립트 작성으로 jsonobject, jsonarray 값을 가져온 다음 배열안에 담긴 값을 가져오려고 했는데 위와같은 에러가 나타났습니다. 

     

    가져올 json 데이터 형태는 아래처럼 구성되어 있습니다.

    postman 으로 가져온 서버 데이터

     

    <json parsing 에 사용한 SensorData 클래스>

    [System.Serializable]
    public class SensorData
    {
        public string code;
        public string msg;
        public SensorDataList[] item;
    }

    <jsonarray에 사용한 SensorDataList 클래스>

    [System.Serializable]
    public class SensorDataList
    {
        public string temperature;
        public string humidity;
        public string oxygen;
        public string carbonMonoxide;
        public string methane;
        public string hydrogenSulfide;
    }

     

    이렇게 작성한 후 디버깅으로 데이터를 출력해보면 위와 같은 에러가 나타납니다. 문제가 뭔지 찾아보다가 한가지 까먹은게 있었다는걸 생각했습니다.

    일반적으로는 서버에 json 데이터를 요청할 때 넘겨받는 데이터와 key 값이 같아야 하는데 그 부분을 깜빡하고 다르게 작성해서 나타난 문제였습니다.

     

    SensorData 클래스의 3번째 필드값의 변수명이 item 으로 되어있는데 요청할 key 값은 data 였습니다.

    변수명을 item 에서 data 로 변경한 후 다시 요청해보니 이상없이 잘 나오네요.

     

    <서버에 데이터 요청한 코드>

    UnityWebRequest request = UnityWebRequest.Post(url, "");
    
            yield return request.SendWebRequest();
    
            if(request.error == null)
            {
                Debug.Log(request.downloadHandler.text);
                string jsonObject = request.downloadHandler.text;
                SensorData sd = JsonUtility.FromJson<SensorData>(jsonObject);
                Debug.Log("code : " + sd.code);
                Debug.Log("msg : " + sd.msg);
    
                foreach (SensorDataList sensor in sd.data)
                {
                    Debug.Log("data temperature : " + sensor.temperature);
                    Debug.Log("data humidity : " + sensor.humidity);
                    Debug.Log("data oxygen : " + sensor.oxygen);
                    Debug.Log("data carbonMonoxide : " + sensor.carbonMonoxide);
                    Debug.Log("data methane : " + sensor.methane);
                    Debug.Log("data hydrogenSulfide : " + sensor.hydrogenSulfide);
                }
            }
            else
            {
                Debug.Log("UnityWebRequest Error 발생");
            }

     

     

     

     

     

     

    댓글

Designed by Tistory.