Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# StartRoutine(带WWW)在Android上不起作用,但在编辑器Unity上起作用_C#_Android_Unity3d - Fatal编程技术网

C# StartRoutine(带WWW)在Android上不起作用,但在编辑器Unity上起作用

C# StartRoutine(带WWW)在Android上不起作用,但在编辑器Unity上起作用,c#,android,unity3d,C#,Android,Unity3d,我正在为我的web服务开发一个应用程序。我使用的是LitJson,我完成了应用程序,但在导出它以在android中测试它时,与WWWIEnumerators相关的应用程序不起作用 例如,一个启动会话的按钮,只有调用IEnumerator的函数起作用,但IEnumerator本身不起作用,我通过放置一条为应用程序创建的警报消息来检查它 这是按钮调用的函数: public void LogIn() { UserName = GameObject.Find("inputUsuario").tr

我正在为我的web服务开发一个应用程序。我使用的是
LitJson
,我完成了应用程序,但在导出它以在android中测试它时,与WWW
IEnumerator
s相关的应用程序不起作用

例如,一个启动会话的按钮,只有调用
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());
}
我必须补充一点,Android上的调试控制台没有错误。
此外,我必须澄清,我在URL中添加了前缀“http://”,因为这是一个解决方案,给出了我所看到的问题。

当您实例化一个
新的WWW(串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;
}

伙计们,有时错误很少,但简而言之,由于“反复试验”,我成功地找到了错误,问题是我试图使用
GetChild
获取
UserName
Password
的值,如下代码:

  `Password = GameObject.Find("inputPassword").transform.GetChild(2).gameObject.GetComponent<Text>().text;`
`Password=GameObject.Find(“inputPassword”).transform.GetChild(2.GameObject.GetComponent().text`
由于某些原因,Android上不存在该对象,我了解到这一点,因为我一直在测试,直到部分代码出现问题。然后我决定更改代码,以更具体的方式查找文本,通过inputUserTextObj更改文本对象,与密码对象相同,并通过以下方式更改代码:

    UserName = GameObject.Find("inputUsuarioTextObj").gameObject.GetComponent<Text>().text;
    Password = GameObject.Find("inputPasswordTextObj").gameObject.GetComponent<Text>().text;
UserName=GameObject.Find(“inputusariotextobj”).GameObject.GetComponent().text;
Password=GameObject.Find(“inputPasswordTextObj”).GameObject.GetComponent().text;
正如我所说的,我知道问题不在于IEnumerator,但调试没有向我显示任何错误似乎太奇怪了,因为这是一个典型的“GameObject为Null”错误,我甚至可以用我的生命向他们发誓调试应用程序,而我从未显示过所述错误


但是,嘿,非常感谢你们的时间,伙计们,真的感受到了支持,并原谅我占用了你们的时间。

Android上的
UrlLogin
print(www.text)
的价值是什么?如果您从
Debug.Log(“error:+www.error”)中得到任何错误你也应该发布它。这将有助于回答您的问题。当您说它在编辑器上工作时,您的意思是说它只是在您按play键时编译,还是说它实际执行了您想要的操作应用程序没有启动任何值,IEnumerator没有完全工作(仅在Android上),在编辑器中它工作正常,它启动值​​我可以正确地完成“Login”功能,应用程序的其他IEnumerator也可以这样做。UrlLogin的值是:并且我没有得到任何错误,它只是不起作用。这个指令不应该在末尾:yield return www;吗;。在执行ProcessjsonLogin()之前返回;好的,如果
www.isDone
,我会制作一个小的文本obj来调试,并且再次在编辑器中工作,但是在Android上,它什么也不做。我调试应用程序,我不能得到任何错误。它什么也不做。现在,我决定用一个简单的代码替换IEnumerator的所有代码:
public IEnumerator loginww(){yield return new WaitForSeconds(1);GameObject.Find(“DebugTextObj”).GameObject.GetComponent().text=“www-ins-not-Done”}
同样,它在Android上不起作用,但在编辑器中起作用。我想知道减号的原因,以便更新代码。代码非常好用,我在上面备份了@Programmer,初始代码没有任何错误。你的代码错了。加载WWW内容时,您不会暂停与waitforseconds的协同程序,这没有任何意义。时间安排的逻辑是不相关的。至少如果你能打破这个循环,我可以看到逻辑的开始。最后一行是无用的,您不能从协同程序中产生内容。这不是用于集合的IEnumerator,如果需要返回数据,可以通过回调或参数赋值来实现。如果编辑连接在同一个地方使用,则很可能是相同的。@Everts您无法纠正此人,因为他不会听。这种答案就是为什么要按下投票按钮。var blueColor=Color.white;这是可行的,但也是错误的。如果您在设备上运行它,不要期望日志显示在编辑器上。我提供了一个关于如何在Android设备上查找日志的链接。美好的你真的确定这就是问题所在吗?这已经修复了?是的,输入链接,但我发誓我没有找到任何东西,或者我没有搜索好:/但是,是的,这就是问题所在,整个应用程序正在正常运行,没有任何问题,谢谢:)好的。不客气。奇怪的是,
GetChild()
在Android上失败了。可能没有得到正确的游戏对象。我将投票支持这个答案,因为它解决了问题。快乐编码!
    UserName = GameObject.Find("inputUsuarioTextObj").gameObject.GetComponent<Text>().text;
    Password = GameObject.Find("inputPasswordTextObj").gameObject.GetComponent<Text>().text;