Передача строки из IEnumerator в void
Я пытаюсь передать строку из IEnumerator в пустоту. но строка продолжает выходить нулевой: вот мой код: я новичок в этом, поэтому, пожалуйста, помогите Спасибо всем.
моя пустота
public void ResisterButton ()
{
//checked Username
if (Username != "") {
StartCoroutine (CheackDBUN (Username));
Debug.LogWarning("User Data String in ResisterButton " + userDataString); // not work is empty :(
// do stuff with text eg turn bool UN = true
больше кода не делать с этим
и IEnumerator
IEnumerator CheackDBUN(string UsernamePost ){
WWWForm form = new WWWForm ();
form.AddField ("usernamePost", UsernamePost);
WWW userData = new WWW(checkUsernameURL, form);
yield return userData;
string userDataString = userData.text;
Debug.LogWarning("User Data String in CheackDBUN " + userDataString); //Working has text
yield return (userDataString);
}
MySQL и PHP-код все работает нормально
Спасибо, надеюсь, что работает, если нужно знать больше, пожалуйста, спросите
2 ответа
Вы должны дождаться окончания сопрограммы, прежде чем использовать userDataString
результат. Даже если ты не меняешься userDataString
в CheackDBUN
(что, я полагаю, было вашим намерением), вы все еще можете видеть, что User Data String in ResisterButton
зарегистрирован раньше User Data String in CheackDBUN
,
Вы можете использовать делегата обратного вызова, чтобы сказать сопрограмму, что делать с userDataString
как только это закончено
public void ResisterButton ()
{
if (Username != "")
{
StartCoroutine(CheackDBUN(Username,
(userDataString) =>
{
Debug.LogWarning("User Data String in ResisterButton " + userDataString);
// do stuff with text eg turn bool UN = true
}
));
}
}
IEnumerator CheackDBUN(string UsernamePost, Action<string> callback){
WWWForm form = new WWWForm ();
form.AddField ("usernamePost", UsernamePost);
WWW userData = new WWW(checkUsernameURL, form);
yield return userData;
string userDataString = userData.text;
Debug.LogWarning("User Data String in CheackDBUN " + userDataString); //Working has text
callback(userDataString);
}
Вам нужно заставить функцию void принимать строку примерно так:
public void ResisterButton (string str){
А затем передайте ему строку пользовательских данных следующим образом:
Debug.LogWarning("User Data String in CheackDBUN " + userDataString); //Working has text
ResisterButton(userDataString);
yield return (userDataString);