【发布时间】:2020-03-02 22:43:11
【问题描述】:
我是使用 Xamarin.Forms 的新手,我目前正在创建一个注册页面。我正在尝试创建某种方法来检查创建帐户时是否已使用电子邮件。我正在使用 firebase 实时数据库。我设法让应用程序检查电子邮件是否已被使用并显示错误,但是当电子邮件有效(未使用)时,当我去创建帐户时,应用程序不会做任何事情。我错过了什么?
我已经提供了代码
public Command SignUpCommand
{
get
{
return new Command(() =>
{
var hasSymbols = new Regex(@"[!@#$%^&*()_+=\[{\]};:<>|./?,-]");
//null or empty field validation, check weather email and password is null or empty
if (string.IsNullOrEmpty(Email) || string.IsNullOrEmpty(Password))
{
App.Current.MainPage.DisplayAlert("Empty Values", "Please enter Email and Password", "OK");
}
else if (!Email.Contains("@"))
{
App.Current.MainPage.DisplayAlert("", "Email Address is Invalid", "OK");
}
else if (Password.Length < 8)
{
App.Current.MainPage.DisplayAlert("", "Password is less than 8 characters", "OK");
}
else if (!Password.Any(char.IsUpper))
{
App.Current.MainPage.DisplayAlert("", "Password Must Contain at Least 1 Uppcase Letter", "OK");
}
else if (!hasSymbols.IsMatch(Password))
{
App.Current.MainPage.DisplayAlert("", "Password should contain At least one special case characters", "OK");
}
else if (Password != ConfirmPassword)
{
App.Current.MainPage.DisplayAlert("", "Password must be same as above!", "OK");
}
else if (string.IsNullOrEmpty(StudentID))
{
App.Current.MainPage.DisplayAlert("Empty Values", "Please enter Student ID", "OK");
}
else if (StudentID.Length < 9)
{
App.Current.MainPage.DisplayAlert("", "Student ID is Incorrect!", "OK");
}
else
{
EmailCheck();
}
});
}
}
private async void EmailCheck()
{
//call GetUser function which we define in Firebase helper class
var user = await FirebaseHelper.GetUser(Email);
//firebase return null valuse if user data not found in database
if (user != null)
if (Email == user.Email)
{
await App.Current.MainPage.DisplayAlert("Email Already Used", "", "Ok");
}
else
SignUp();
}
private async void SignUp()
{
//call AddUser function which we define in Firebase helper class
var user = await FirebaseHelper.AddUser(Email, Password, StudentID, FirstName, LastName, CarMake, CarModel,
CarYear, CarColor, LicenseNumber);
//AddUser return true if data insert successfuly
if (user)
{
await App.Current.MainPage.DisplayAlert("SignUp Success", "", "Ok");
//Navigate to Wellcom page after successfuly SignUp
//pass user email to welcom page
await App.Current.MainPage.Navigation.PushAsync(new LoginPage());
}
else
await App.Current.MainPage.DisplayAlert("Error", "SignUp Fail", "OK");
}
}
}
【问题讨论】:
-
应用程序什么都不做是什么意思?我不确定这与您遇到的问题有关,但我肯定会等待 SignUp();在 EmailCheck() 中
-
应用程序是指当我构建项目并运行模拟器时。当我在注册页面上并单击注册按钮时,该按钮不执行任何操作,但是如果我从命令 SignUpCommand() 直接转到 signup(),绕过 EmailCheck(),帐户确实会得到创建并带我进入登录页面。
-
另外,当我将 await 添加到 SignUp() 时,我收到一条错误消息,指出我无法等待 void,但如果我从 SignUp() 中删除 void,我会收到另一个错误。
-
没错,你不能等待一个 void 返回类型,将它从 void 更改为 Task,你将能够等待这个方法
标签: c# xamarin xamarin.forms xamarin.android xamarin.ios