Foreach, с одним всплывающим окном DisplayAlert? - PullRequest
0 голосов
/ 17 января 2020

Привет, парень. Я пытаюсь найти способ отображения всплывающего окна DisplayAlert, когда кто-то ввел неправильные данные в процессе входа в систему.

Проблема в том, что вход в систему немного "странный". Я не сравнивая с базой данных, я сравниваю со списком клиентов, которые я получаю от APi. Поэтому мне нужно l oop бросить, чтобы потом выяснить, верны ли детали.

У меня есть фаза входа в систему 1 () который проверяет API Wordpress, но я хочу, чтобы это было в состоянии уведомлять на Фазе 1 и 2, Фаза 1 - Имя пользователя = Имя пользователя Пароль = Пароль Где фаза 2 - просто Имя пользователя = Имя пользователя, я знаю, что это не безопасно больше формальности, чем чего-либо.


  public async void Login_Phase1()
        {
            try
            {


                #region Login Phase 1

                var client = new WordPressClient("http://XXX.co.za/wp-json/");
                client.AuthMethod = AuthMethod.JWT;
                try
                {
                    await client.RequestJWToken(Usernamelabel.Text, Password.Text);
                }
                catch (Exception e)
                {
                    await App.Current.MainPage.DisplayAlert("Something Went wrong", e.ToString(), "OK");

                }


                var x = client;
                var isValidToken = await client.IsValidJWToken();

                WpApiCredentials.token = client.GetToken();

                if (isValidToken)
                {

                   Login_Phase2();
                }
                else
                {
                 await App.Current.MainPage.DisplayAlert("Detail's are Incorect", "Token not Found", "OK");
                }
            }
            catch (Exception ex)
            {
                Crashes.TrackError(ex);
            }
            #endregion
        }


public void Login_Phase2()
        {
            try
            {


                #region login Phase 2
                var list = FetchCustomers.customers.ToList();

                foreach (var user in list)
                {

                    if (user.username == Usernamelabel.Text)
                    {
                        Preferences.Set("CId", user.id.ToString());
                        Preferences.Set("Token", WpApiCredentials.token);
                        Preferences.Set("CUsername", user.username);
                        Preferences.Set("CEmail", user.email);
                        Users.Loggedin = true;
                        Application.Current.SavePropertiesAsync();
                        App.Current.MainPage.DisplayAlert("Complete", "Login Process Complete, Enjoy", "OK");
                        App.Current.MainPage = new Home("Mica Market");
                    }
                   //Want to add a Display popup Here to say the information is entered incorrectly, but 
                      not have it repeat 200 Time's 
                }
            }

            catch (Exception ex)
            {
                Crashes.TrackError(ex);
            }
            #endregion
        }

Выборка всех клиентов для проверки


private async void ExtractWooData(List<Customer> x)
        {
            try
            {


                #region FetchC
                RestAPI rest = new RestAPI("http://xxxxxx/wp-json/wc/v3/", "ck_a25xxxxxxxxxxx0", "cs_8xxxxxxxx8xxxx");
                WCObject wc = new WCObject(rest);


                int pageNum = 1;
                var isNull = false;
                List<Customer> oldlist;

                while (!isNull)
                {

                    var page = pageNum.ToString();
                    x = await wc.Customer.GetAll(new Dictionary<string, string>() {
                {
                    "page", page
                }, {
                    "per_page", "100"
                }
            });
                    oldlist = FetchCustomers.customers ?? new List<Customer>();
                    if (x.Count == 0)
                    {


                        break;
                    }
                    else
                    {
                        //1st loop customers needs to = 100
                        //2nd loop oldist needs to = 40+
                        //If count = 0 then => Combine Customers + Oldist
                        pageNum++;

                        FetchCustomers.customers = oldlist.Union(x).ToList();


                    }


                }
            }
            catch (Exception ex)
            {
                Crashes.TrackError(ex);
            }
            #endregion
        }

Любой совет?

1 Ответ

1 голос
/ 17 января 2020

вы можете заменить foreach на LINQ запрос

// find the first match
var found = list.Where(user => user.username == Usernamelabel.Text).FirstOrDefault();

if (found != null) 
{
  // set preferences and navigation
}
else 
{
  // DisplayAlert
}
...