C#Unity3D JSON悬挂

C#Unity3D JSON悬挂,c#,json,unity3d,C#,Json,Unity3d,首先我必须指出,我对C#很陌生。 我正在使用Unity3D开发一个应用程序,该应用程序的一部分要求我解析存储在服务器上的JSON文件 我遇到的问题是,有时候一切都很完美,而有时候应用程序挂在下载JSON的服务器上。我没有收到任何错误,脚本的进度从来没有达到100% 这是我的密码: public IEnumerator DownloadJSONFile(string url) { Debug.Log("JSON URL: "+ url); mJsonInfo =

首先我必须指出,我对C#很陌生。 我正在使用Unity3D开发一个应用程序,该应用程序的一部分要求我解析存储在服务器上的JSON文件

我遇到的问题是,有时候一切都很完美,而有时候应用程序挂在下载JSON的服务器上。我没有收到任何错误,脚本的进度从来没有达到100%

这是我的密码:

public IEnumerator DownloadJSONFile(string url) 
{
        Debug.Log("JSON URL: "+ url);
        mJsonInfo = new WWW(url);
        yield return mJsonInfo;

        mIsJSONRequested = true;
 }
private void LoadJSONData(string jsonUrl)
{

    Debug.LogWarning("LoadJSONData, url= "+jsonUrl);

    if(!mIsJSONRequested){

        StartCoroutine(DownloadJSONFile(jsonUrl));

    } else {

        if(mJsonInfo.progress >= 1)
        {


            if(mJsonInfo.error == null )
            {

                //** PARSE THE JSON HERE **//

            }else
            {
                Debug.LogError("Error downloading JSON");
                mIsLoadingData = false;
            }


        } else {
            Debug.LogWarning("!! ### JSON DOWNLOADING: "+mJsonInfo.progress+"%");
            if(mJsonInfo.error != null )
                {
                    Debug.LogError("Error downloading JSON");
                    Debug.LogError("JSON Error:"+mJsonInfo.error);
                    mIsLoadingData   = false;
                }
        }
    }
}
正如我所说,50%的时间JSON数据几乎立即加载,50%的时间进度从未达到1。我从未在
mJsonInfo.error
变量中收到错误


任何关于我做错了什么的建议都将不胜感激

您需要等待下载完成

如中所述,您需要:

var www = new WWW(...);
yield return www;
因此,您需要将方法的返回类型从
void
修改为
IEnumerator

private IEnumerator LoadJSONData(string jsonUrl)
{
    Debug.LogWarning("LoadJSONData, url= "+jsonUrl);

    if(!mIsJSONRequested)
    {
        // Gets the json book info from the url
        mJsonInfo = new WWW(jsonUrl);
        yield return mJsonInfo; //Wait for download to complete
        mIsJSONRequested = true;
    } 
    else 
    {
      ...
    }
}

isDone是你需要的

WWW lWWW = new WWW(...)
if(lWWW.isDone)
 then parse it

我发现了这个问题,我想我会为其他遇到同样问题的人发布我的解决方案。
最终的解决方案是服务器上的JSON文件。我使用PHP(CakePHP)生成JSON,当通过浏览器打开PHP生成的文件时,响应时间是即时的,但由于某种原因,从我的移动应用程序中,它会挂起。因此,我更改了服务器端代码,实际创建并更新了一个JSON文件,现在一切正常。

感谢Alberto的建议,我已经尝试过了(用更新的代码编辑了我的问题),但我仍然遇到同样的问题。有时有效,有时无效