StartCoroutine(使用WWW)在Android上不起作用,但在编辑器上也是如此 - Unity

时间:2017-06-26 01:45:15

标签: c# android unity3d

我正在为我的网络服务申请。我使用LitJson,我完成了应用程序但是在导出它以在我的android中测试它的那一刻与WWW IEnumerator无关。

例如,一个启动会话的按钮,只有调用IEnumerator的函数有效,但IEnumerator本身不起作用,我通过发出一条警告消息来检查它为应用程序创建。

这是按钮调用的功能:

public void LogIn() {
    UserName = GameObject.Find("inputUsuario").transform.GetChild(2).gameObject.GetComponent < Text > ().text;
    Password = GameObject.Find("inputPassword").transform.GetChild(2).gameObject.GetComponent < Text > ().text;
    Debug.Log("Username:" + UserName + "And Password:" + Password);
    StartCoroutine(LogInWWW());
}

这是IEnumerator

public IEnumerator LogInWWW() {
    WWW www = new WWW(UrlLogin + "?userName=" + UserName + "&password=" + Password);
    yield return www;
    print(www.text);
    if (www.error == null) {
        ProcessjsonLogin(www.text);
    } else {
        Debug.Log("ERROR: " + www.error);
    }
}

我必须补充说Android上的调试控制台没有错误。 此外,我必须澄清,我已经在网址中添加了前缀“http://”,因为它是一个解决方案,可以提供我见过的问题。

2 个答案:

答案 0 :(得分:1)

好吧,有时候这些错误很少见,但总之,由于“试错”,我设法得到错误,问题是我试图获得UserName和{{1的值使用Password,如下面的代码:

GetChild

由于某些原因在Android上该对象不存在,我学到了这一点,因为我正在测试直到我遇到问题的部分代码。然后我决定更改代码以更具体的方式查找文本,通过inputUserTextObj更改文本对象,与Password对象相同并通过以下方式更改代码:

  `Password = GameObject.Find("inputPassword").transform.GetChild(2).gameObject.GetComponent<Text>().text;`

正如我所说,我知道问题不是IEnumerator,但是看起来很奇怪Debugging并没有向我显示任何错误,因为它是“GameObject is Null”的典型错误,我甚至可以向他们发誓我调试应用程序的生活,我从未表现出错误

但是,嘿,非常感谢你们的时间,真的感受到支持,并原谅我花时间。

答案 1 :(得分:-2)

当您实例化new WWW(strung Url)时,它也会隐式启动请求,但它不是同步操作,它是异步的,因此您必须先检查www.isDone才能使用www.text。我认为它适用于Unity Editor,因为它只是一个更快的连接。

public IEnumerator Request(){
    using (var testRequest = new WWW(@"URL")) {
    var totalWaited = 0;
    var timeOuted = false;
    while (testRequest.isDone == false) {
        yield return new WaitForSeconds(1);
        totalWaited++;
        if (totalWaited > timeOutInSeconds) {
            timeOuted = true;
        }
    }
    if (timeOuted) { Debug.LogError("TimeOut"); yield break; }
    yield return testRequest.text;
}

This will prove some other users wrong. You can see that you will get an error if you access <code>.text</code> immediately