unitywebrequest函数的未知错误

时间:2019-06-13 19:10:19

标签: unity3d webrequest unitywebrequest

我正在做apk,当我在手机上运行它时,出现以下错误

  

“未知错误”

但是最奇怪的是,如果我统一运行它可以正常工作,我使用以下代码向我展示了在手机上执行该错误的原因,因为在统一环境下完美运行

IEnumerator logIn(WWWForm form)
{
    using (UnityWebRequest webRequest = UnityWebRequest.Post("http://localhost:3000/login", form))
    {
        yield return webRequest.SendWebRequest();

        if (webRequest.isNetworkError )
        {
            Debug.Log(webRequest.error);
            advertencia.SetActive(true);
            advertencia.GetComponent<Text>().text=webRequest.error+"1";
        }
        else if (webRequest.isHttpError)
        {
            advertencia.SetActive(true);
            advertencia.SetActive(true);
            advertencia.GetComponent<Text>().text = webRequest.error+"2";
        }
        else
        {                
            SceneManager.LoadScene("Principal");
        }
    }
}

使用以下代码检查我的apk是否已连接到互联网,如果代码已连接到互联网,则会显示文本

private void Update()
{
    if (Application.internetReachability == NetworkReachability.NotReachable)
    {
        advertencia.SetActive(true);
        Debug.Log("Error. Check internet connection!");
    }

}

代码更加完整:

private Text userText;
private InputField password;
public GameObject advertencia;

    private void Start()
{
    userText = GameObject.Find("UserInput").GetComponent<Text>();
    password = GameObject.Find("PasswordInput").GetComponent<InputField>();
    advertencia = GameObject.Find("Advertencia");
    advertencia.SetActive(false);

}

  //the function with which the corrutina invoked
   public void Log()
{
    Debug.Log("Usuario : " + userText.text + "\nContraseña : " + password.text);

    WWWForm form = new WWWForm();
    form.AddField("codigo", userText.text);
    form.AddField("contrasena", password.text);

    StartCoroutine(logIn(form));

}

1 个答案:

答案 0 :(得分:0)

问题

您使用URL

http://localhost:3000/login

您正在尝试将Web请求发送到主机localhost。这可以在Unity中的PC上运行,因为PC 是您尝试联系的服务器。

该服务器未在您的手机上运行,​​但您的手机正尝试将请求发送到端口3000上的自身,这显然会失败。

详细了解What is a localhost?

解决方案

用服务器或PC上实际拥有的IP或network address替换localhost,您应该没事。

例如,要查找PC的IP,请使用

  • Linux / Unix:在终端呼叫ifconfig
  • Windows:在CMD中调用ipconfig

当然,您的PC和电话也必须位于同一网络中,或者至少要路由,以便您的电话可以通过给定的IP /网络地址到达服务器/ PC。

可能还必须配置PC的防火墙以允许该端口上的传入流量。