C#Unity3D JSON悬挂
首先我必须指出,我对C#很陌生。 我正在使用Unity3D开发一个应用程序,该应用程序的一部分要求我解析存储在服务器上的JSON文件 我遇到的问题是,有时候一切都很完美,而有时候应用程序挂在下载JSON的服务器上。我没有收到任何错误,脚本的进度从来没有达到100% 这是我的密码: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 =
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的建议,我已经尝试过了(用更新的代码编辑了我的问题),但我仍然遇到同样的问题。有时有效,有时无效