async void SignInProcedure(object sender, EventArgs e) { LoginView user = new LoginView { Email = Entry_Username.Text, Password = Entry_Password.Text }; //check for InternetConnection before calling the webserver if (!Lbl_NoInternet.IsVisible) { if (user.CheckNullInformation()) { Token result; try { //Login API call result = await App.RestService.Login(user); } catch (NullReferenceException) { result = null; } catch (TaskCanceledException) { result = null; await DisplayAlert("Login", "Not able to reach server in time.", "Ok"); } //if the login was successful if (result != null) { //make sure previous token is deleted if (App.TokenDatabase.GetToken() != null) { App.TokenDatabase.DeleteToken(0); } //save token for current user App.TokenDatabase.SaveToken(result); //retrieve info about the user who logges in UserDto userdto; try { userdto = await App.RestService.FindUserByEmail(new FindUserByEmailViewModel { Email = user.Email }); } catch (NullReferenceException) { userdto = null; } catch (TaskCanceledException) { userdto = null; await DisplayAlert("Login", "Not able to reach server in time.", "Ok"); } //prepare user obj for saving in local db User usr; if (userdto == null) { await DisplayAlert("Login", "Not able to get user data from server.", "Ok"); //TODO: try to reach server later usr = new User { RemoteId = user.Email, FirstName = user.Email, LastName = user.Email, Email = user.Email, Password = user.Password, BirthDate = DateTime.Now, Gender = user.Email }; } else { usr = new User { RemoteId = userdto.RemoteId, FirstName = userdto.FirstName, LastName = userdto.LastName, Email = user.Email, Password = user.Password, BirthDate = userdto.BirthDate, Gender = userdto.Gender }; } //make sure previous user is deleted if (App.UserDatabase.GetUser() != null) { App.UserDatabase.DeleteUser(0); } //save current logged user in local DB App.UserDatabase.SaveUser(usr); //navigate to dashboard if (Device.RuntimePlatform == Device.Android) { Application.Current.MainPage = new Dashboard(new HomePage()); } else if (Device.RuntimePlatform == Device.iOS) { await Navigation.PushModalAsync(new Dashboard(new HomePage())); } } else { await DisplayAlert("Login", "Login not correct: wrong username or password.", "Ok"); } } else { await DisplayAlert("Login", "Login not correct: empty username or password.", "Ok"); } } else { await DisplayAlert("Login", "No internet. Cannot reach the server. Please connect in order to login.", "Ok"); } }