RequestManager

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

RequestManager

Сообщение FordeD 17 июл 2018, 13:20

Добрый день, хочу сделать универсальный класс для работы с запросами GET и POST. На этапе передачи параметров по принципу ключ-значение я остановился на Hashtable и не могу решить ошибку.

Assets/Scripts/RequestManager.cs(7,23): error CS1624: The body of `RequestManager.apiGET(string, System.Collections.Hashtable)' cannot be an iterator block because `string' is not an iterator interface type

Сам код класса:
Скрытый текст:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class RequestManager : MonoBehaviour {

public static string apiGET(string path, Hashtable parameters) {
string result = null;
if (parameters != null) {
foreach (DictionaryEntry param in parameters) {
result = string.Concat(string.Concat("&", param.Key), param.Value.ToString());
}
result = result.Substring(1);
}
string url = GlobalsParams.API_URL+""+path;
if(result != null) {
url = url + "?" + result;
}
WWW req = new WWW(url);

float elapsedTime = 0.0f;

while (!req.isDone)
{
elapsedTime += Time.deltaTime;
if (elapsedTime >= 10.0f) break;
yield return null;
}

if (!req.isDone || !string.IsNullOrEmpty(req.error))
{
Debug.Log("Load Failed");
result(null); // Pass null result.
yield break;
} else {
Debug.Log(req.text);
}

return req.text;
}
}
FordeD
UNец
 
Сообщения: 22
Зарегистрирован: 17 июл 2018, 13:16

Re: RequestManager

Сообщение Anonymyx 17 июл 2018, 13:50

Если yield то возвращаем IEnumerable<string>, а не просто string.
Аватара пользователя
Anonymyx
Адепт
 
Сообщения: 1973
Зарегистрирован: 05 апр 2015, 15:55

Re: RequestManager

Сообщение FordeD 17 июл 2018, 15:43

Попробовал переделать на Dictionary

Синтаксис:
Используется csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class RequestManager : MonoBehaviour {

        public static string apiGET(string path, Dictionary<string,string> parameters) {
                string result = "";
                if (parameters.Count > 0) {
                        foreach (string key in parameters.Keys) {
        result = string.Concat(string.Concat("&", key), parameters[key].ToString());
                        }
                        result = result.Substring(1);
                }
                string url = GlobalsParams.API_URL+""+path;
                if(result != "") {
                        url = url + "?" + result;
                }
                WWW req = new WWW(url);

                float elapsedTime = 0.0f;
 
                while (!req.isDone)
                {
                                elapsedTime += Time.deltaTime;
                                if (elapsedTime >= 10.0f) break;
                }

                if (!req.isDone || !string.IsNullOrEmpty(req.error)) {
                        Debug.Log("Load Failed");
                        return "Load Failed";
                } else {
                        Debug.Log(req.text);
                        return req.text;
                }

        }
}
 


Теперь выдает ошибочный запрос. Не ожидая выполнения идет дальше
FordeD
UNец
 
Сообщения: 22
Зарегистрирован: 17 июл 2018, 13:16

Re: RequestManager

Сообщение 1max1 17 июл 2018, 15:53

Ну и откуда нам знать что там у тебя за запросы и что ты пытаешься нахимичить?
Эх щас бы в 2к18 телепатами быть...
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: RequestManager

Сообщение FordeD 17 июл 2018, 18:20

Сказали в телеграме, что можно использовать UniRx и в итоге получилось вот что:

Синтаксис:
Используется csharp
Debug.Log("OnStart: "+url);
                returnedValue = "";
                var observer = Observer.Create<string>(
                        x => {
                                RequestManager.returnedValue = x;
                                Debug.Log("OnNext: " + x + " || " + RequestManager.returnedValue);
                        },
                        ex => Debug.Log("OnError: " + ex.Message),
                        () => Debug.Log("OnCompleted")
                );

                ObservableWWW.Get(url).Subscribe(observer);
 


Но все равно при обращении к методу не идет ожидание ответа. Каким образом его можно сделать с UniRx или же без него (желательно)
FordeD
UNец
 
Сообщения: 22
Зарегистрирован: 17 июл 2018, 13:16


Вернуться в Почемучка

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot] и гости: 29