我有一个统一程序,可以根据网络服务器请求的数据来更改其内容。我编写了以下代码来进行网络请求。
public static string[] GetDBValues(int type, string[] data){
string base_url = "http://localhost/artez/onderzoeks_opdracht/interface_test/get_elements.php";
string typePrefix = "?type=";
string dataPrefix = "data[]=";
string uriString = base_url + typePrefix + type;
foreach (string dataElement in data){
uriString += "&" + dataPrefix + dataElement;
}
Debug.Log("executing url request");
UrlData(uriString);
return new string[] {"a"};
}
public static IEnumerator UrlData(string url){
Debug.Log("searching the web");
using (WWW www = new WWW(url)){
Debug.Log(www.text);
yield return www.text;
}
}
此代码可以编译并执行,但是我从未看到以下Debug.Log("searching the web")
被记录。所以我相信我的代码永远不会执行最后一部分,为什么会这样呢?
我是C#的新手。
如果不清楚,请告诉我,以便我澄清。
答案 0 :(得分:2)
您的代码中有很多问题:
1 。UrlData
函数是协程函数。您必须使用StartCoroutine
来调用它,而不是像正常函数那样直接调用它。因此,UrlData(uriString);
应该是StartCoroutine(UrlData(uriString));
2 。在访问WWW
属性之前,您必须屈服或等待WWW.text
请求完成。应该是yield return www
而不是yield return www.text
。
public static IEnumerator UrlData(string url)
{
Debug.Log("searching the web");
using (WWW www = new WWW(url))
{
yield return www;
Debug.Log(www.text);
}
}
3 。您似乎希望GetDBValues
从UrlData
函数返回结果。如果是这样,则只需将Action
作为参数添加到UrlData
函数中,以便可以使用它返回结果。
类似这样的东西:
public static IEnumerator UrlData(string url, Action<string> result)
{
Debug.Log("searching the web");
using (WWW www = new WWW(url))
{
yield return www;
if (result != null)
result(www.text);
}
}
然后按如下所示启动它。结果在result
变量中:
StartCoroutine(UrlData("url", (result) =>
{
Debug.Log(result);
}));