2016-07-12 3 views
0

В настоящее время я столкнулся с какой-то странной проблемой. Я отключу свое подключение к Интернету, чтобы поместить над ним код обработки. Я думал, что он вернет мне код ошибки, но просто даст мне пустой ответ, а не покажет исключение. У меня есть следующий вывод отладки, когда я печатаю более подробную информацию на экране.Обращение с пустым ответом с веб-сервера

enter image description here

В основном я хочу диалоговое окно, чтобы показать, когда нет подключения к Интернету. Но как справиться с этой ситуацией !!!

Поскольку нет никакого ответа со стороны JSON сервера, то также есть некоторые байты я получаю от сервера. Вот мой код:

Dictionary<string,string> headerDisc = new Dictionary<string, string>(); 
    headerDisc.Add ("Api-Key", "You API Key"); 

    WWW www = new WWW (GameConstants.CONTESTANT_LIST_BASE_URL, new byte[] { (byte)0 }, headerDisc); 
    yield return www; 

    if (www.error == null) { 

     Debug.Log ("bytes: " + www.bytes.Length); 
     Debug.Log ("size: " + www.size);   
     Debug.Log ("length: " + www.text.Length); 
     Debug.Log ("Data: " + www.text); 

     if (www.text.Length <= 0) { 
      AppManager.Instance.DialogMessage = "No Server Response Found!"; 
      Camera.main.SendMessage ("ActivateDialogBoxPanel", true, SendMessageOptions.DontRequireReceiver); 
     } else { 

      JSONObject jsonObj = new JSONObject (www.text); 
      JSONObject messageObj = jsonObj [TAG_MESSAGE]; 

      string successValueStr = jsonObj [TAG_SUCCESS].ToString(); 
      if (successValueStr.Equals (VALUE_TRUE)) 
       // success 
      else 
       // fail 
     } 
    } else { 
     Debug.Log ("Error: " + www.error); 
     AppManager.Instance.DialogMessage = "Error:" + www.error; 
     Camera.main.SendMessage ("ActivateDialogBoxPanel", true, SendMessageOptions.DontRequireReceiver); 
    } 

Пожалуйста, дайте мне некоторое предложение. Если вам нужна дополнительная информация, я буду доступен.

ответ

0

Как я понимаю, вы хотите, чтобы проверить подключение к Интернету отключен показать сообщение пользователю. например, вы можете написать что-то вроде этого.

IEnumerator checkInternetConnection(Action<bool> action){ 
     WWW www = new WWW("http://google.com"); 
     yield return www; 
     if (www.error != null) { 
      action (false); 
     } else { 
      action (true); 
     } 
    } 

, то в вашей функции Start() напишите это.

void Start(){ 
    StartCoroutine(checkInternetConnection((isConnected)=>{ 
     // handle connection status here 
    })); 
} 
+0

Выше исходный код не работает для меня, потому что какая часть инструкции if станет истиной, которую вы должны увидеть в моем коде. www.error имеет значение null в моем ответе, так что определенно ваш код проверки подключения к Интернету также дает мне неправильный ответ. – Siddharth

+0

Просто инвертируйте инструкции if, если вам нужно, я практически не понимаю, что вы сказали. – Everts

+0

Если вы думаете, какая часть инструкции if-else выполняется, тогда у вас есть более четкая идея. По моему мнению, если мой интернет не работает, тогда он должен дать мне www.error! = Null, но в настоящее время его обратное обращение обращается к www.error == null, становясь истинным. Так что я тоже смущен этим !!! – Siddharth

0

У вас неправильный адрес. Вы думаете, что получаете json-файл, но на самом деле получаете HTML-страницу.

Например, если вы сохраняете файл в формате JSON на GitHub:

https://github.com/name/reponame/blob/master/folder/data.json

это загружает HTML, потому что это URL, чтобы проверить содержимое в браузере.

https://raw.githubusercontent.com/name/reponame/blob/master/folder/data.json

и это где текстовый файл на самом деле хранится.

В вашем случае у вас, вероятно, есть аналогичная проблема. Вы достигаете содержимого HTML, пока хотите json-файл. Это то, о чем говорится в предупреждении, неправильном json и отображении начала HTML-файла.

Итак, у вас есть действительное подключение только не является допустимой URL для вашей цели.

+0

Если я снова заново подключился к интернету, все работает нормально, просто прекратите подключение к Интернету и запустите его в редакторе Unity в то время, когда я получаю выше выход. – Siddharth

Смежные вопросы