Как я могу скачать текст с сервера? - PullRequest
0 голосов
/ 25 января 2019

Мне нужно загрузить JSON с сервера и десериализовать его в своем коде, чтобы использовать его.

Я знаю, что мне нужен UnityWebRequest и сопрограмма.Я понимаю два пути.Я могу StartCoroutine, отправить серверу запрос и обработать полученные данные в этом вызываемом Coroutine, или я могу StartCoroutine, отправить запрос и сохранить результат в закрытой переменной класса.В то время, после StartCoroutine я могу делать while (переменная == null), и после этого обрабатывать данные в методе вызывающего абонента

private void Start()
    {
        StartCoroutine(LoadPagesId("SomeURL.com"));
    }

    private IEnumerator LoadPagesId(string url)
    {
        var request = UnityWebRequest.Get(url);
        yield return request.SendWebRequest();

        var data = request.downloadHandler.text;
        request.Dispose();

        // Do something with data
    }

ИЛИ

private string _str;

    private void Start()
    {
        StartCoroutine(LoadPagesId("SomeURL.com"));
        while (_str == null)
        {

        }
        // Do something with data
    }

    private IEnumerator LoadPagesId(string url)
    {
        var request = UnityWebRequest.Get(url);
        yield return request.SendWebRequest();

        _str = request.downloadHandler.text;
        request.Dispose();
    }

Есть ли какой-то другой способ,без глобальных переменных и расширенных методов LOAD?

1 Ответ

0 голосов
/ 26 января 2019

Да, например, вы можете просто добавить обратные вызовы:

private void Start()
{
    StartCoroutine(LoadPagesId("SomeURL.com"), HandleSuccess, HandleError);

    // Or as lambda expressions
    StartCoroutine(LoadPagesId("SomeURL.com"), success => {
       // do something with success
    }, error => {
       // do something with error
    });
}

private IEnumerator LoadPagesId(string url, Action<string> successCallback, Action<string> errorCallback)
{
    var request = UnityWebRequest.Get(url);
    yield return request.SendWebRequest();

    if(www.error)
    {
        errorCallback?.Invoke(www.error);
    } 
    else
    {
        successCallback?.Invoke(request.downloadHandlet.text);
    }
}

private void HandleSuccess(string result)
{
    // Do something
}

private void HandleError(string error)
{
    // Do something
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...