- Home /
yield WWW doesn't work
Hi to everyone, I have a simple code that creates a new account on a database. The problem is that yield doesn't work and I really can't understand why. I attach my code below:
/// <summary>
/// This method prepares the informations to create a new account on database and starts a coroutine that adds the new account
/// </summary>
/// <returns></returns>
public void CreateNewAccountOnDatabase()
{
....
StartCoroutine(DBManager.Istance.CreateNewAccountOnDatabase(name, surname, identification, email, password));
} // End CreateNewAccountOnDatabase
/// <summary>
/// This method creates a new account on database
/// </summary>
/// <returns></returns>
public IEnumerator CreateNewAccountOnDatabase(string name, string surname, string identification, string email, string password)
{
WWWForm form = new WWWForm();
form.AddField("Name", name);
form.AddField("Surname", surname);
form.AddField("Identification", identification);
form.AddField("Email", email);
form.AddField("Password", password);
WWW createAccountWWW = new WWW(this.url, form);
// Waiting for php to send something back to Unity
yield return createAccountWWW;
if (createAccountWWW.error != null)
{
Debug.Log("Cannot Connect to Account Creation: " + createAccountWWW.error); // TODO
}
else
{
string createAccountReturn = createAccountWWW.text;
if (string.Compare(createAccountReturn, "Success") == 0)
{
Debug.Log("Success: Account Created"); // TODO
}
}
} // End CreateNewAccountOnDatabase
Everything works fine...but the only problem is that after
yield return createAccountWWW;
the program skips all remaining code and ends the method;
Thanks for all your help!!!
Answer by rhylvin2016 · Mar 17, 2017 at 02:26 AM
you need to put your WWWFrom form = new WWWForm();
and other form.addfields
inside public void CreateNewAccountOnDatabase()
and just change the arguments to just the forms like this.
public void Login(string email, string password, string macAddress)
{
//encode
byte[] bytesToEncode = Encoding.UTF8.GetBytes(email + ":" + password);
string encodedText = Convert.ToBase64String(bytesToEncode);
//form
WWWForm form = new WWWForm();
form.AddField("macAddress", macAddress);
StartCoroutine(LoginCoroutine(form,encodedText));
}
IEnumerator LoginCoroutine(WWWForm form, string encodedText)
{
using (UnityWebRequest www = UnityWebRequest.Post(globalURL + UrlforAuthentication, form))
{
www.SetRequestHeader("Authorization", "Basic " + encodedText);
yield return www.Send();
if (www.isError)
{
Debug.Log(www.error);
}
else
{
userFunction.UserVoid(www.downloadHandler.text);
}
}
}
This script is my log in script that has a server database.
Your answer
Follow this Question
Related Questions
Wait for file download 1 Answer
How to imitate yield functionality like WWW class 0 Answers
UnityWebRequest timing out ? Send() finishes but isDone = false 1 Answer
Yield www within Gui Update() 0 Answers