我正在做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));
}
答案 0 :(得分:0)
您使用URL
http://localhost:3000/login
您正在尝试将Web请求发送到主机localhost
。这可以在Unity中的PC上运行,因为PC 是您尝试联系的服务器。
该服务器未在您的手机上运行,但您的手机正尝试将请求发送到端口3000
上的自身,这显然会失败。
用服务器或PC上实际拥有的IP或network address替换localhost
,您应该没事。
例如,要查找PC的IP,请使用
ifconfig
ipconfig
当然,您的PC和电话也必须位于同一网络中,或者至少要路由,以便您的电话可以通过给定的IP /网络地址到达服务器/ PC。
可能还必须配置PC的防火墙以允许该端口上的传入流量。