Если заявление на xamarin формы - PullRequest
0 голосов
/ 21 февраля 2019

В настоящее время в моем приложении, когда я его запускаю, код работает правильно, за исключением случаев, когда я добавляю «симптом», который уже принадлежит «истории симптомов», в настоящее время, когда я добавляю симптом, который уже добавлен в историю симптомов,Приложение выдает сообщение «Дубликат симптома», «Вы уже записали этот симптом» и «Исторический симптом», «Этот симптом есть в вашей истории - пожалуйста, восстановите отсюда».Как я могу получить к нему только сообщение «Исторический симптом», «Этот симптом в вашей истории - пожалуйста, восстановите отсюда» сообщение.

В настоящее время, если симптом не удален и перемещен в историю симптомов, приложение будеттолько правильно выводить сообщение «Дубликат симптома», «Вы уже записали этот симптом».

Функциональность работает правильно, нужно только отобразить одно сообщение в функции вместо обоих.

Это текущий код моей кнопки:

 async void btnAdd_Clicked(object sender, EventArgs e)
    {
        CheckSymptomInHistory(AutoCompleteSymptomToAdd.Id);

        //If the autocomplete is not empty - add that symptom to the user symptom table

        if (AutoCompleteSymptomToAdd != null)
        {

            //If the user already has symptoms, loop through them to make sure that they are not adding a duplicate

            if (UserSymptoms.Count > 0)
            {
                foreach (usersymptom item in UserSymptoms)
                {
                    if (item.Symptomid == AutoCompleteSymptomToAdd.Id)
                    {
                        await DisplayAlert("Duplicate Symptom", "You already have recorded this symptom", "OK");


                        return;
                    }

                    //Check if it is not active (i.e in SYmptom History)

                    else

                    {

                        UserSymptomToAdd.Symptomid = AutoCompleteSymptomToAdd.Id;
                        UserSymptomToAdd.UserID = Helpers.Settings.UserKey;
                        UserSymptomToAdd.Datetimeadded = DateTime.Now.ToString();
                        UserSymptomToAdd.IsActive = true;




                        try
                        {
                            await usersymptommanager.AddUserSymptom(UserSymptomToAdd);
                            await AddInitialFeedback(UserSymptomToAdd.Id);
                            //await DisplayAlert("Symptom Added", "Your Symptom has been added", "OK");

                        }
                        catch (Exception ex)
                        {
                            Analytics.TrackEvent("App Screen: " + Title + ": " + ex);
                            //await DisplayAlert("Error", ex.ToString(), "OK");
                        }

                    }

                }

            }

Код для моего сообщения истории:

  async void CheckSymptomInHistory(string id)
    {
        foreach (string item in SymptomHistoryIDs)
        {
            if (id == item)
            {
                await DisplayAlert("Historical Symptom", "This symptom is in your history - Please restore from here", "OK");
            }
        }
    }

Ответы [ 2 ]

0 голосов
/ 21 февраля 2019

Выполните следующие действия, чтобы добиться того, что вы пытаетесь:

Прокомментируйте первую строку кода в вашем методе, например CheckSymptomInHistory(AutoCompleteSymptomToAdd.Id);

В цикле ForEach:

foreach (usersymptom item in UserSymptoms)
            {
                if (item.Symptomid == AutoCompleteSymptomToAdd.Id)
                {
                    await DisplayAlert("Duplicate Symptom", "You already have recorded this symptom", "OK");


                    return;
                }

                else if(CheckSymptomInHistory(AutoCompleteSymptomToAdd.Id);)
                 {

                   await DisplayAlert("Historical Symptom", "This symptom is in your history - Please restore from here", "OK");
                 }

Где CheckSystemInHistory, как показано ниже:

 private bool CheckSymptomInHistory(string id)
{
  foreach (string item in SymptomHistoryIDs)
  {
      if (id == item)
      {
         return true;
      }
  }

  return false;
 }
0 голосов
/ 21 февраля 2019

Итак, первое, что я вижу, это то, что вы делаете нулевую проверку на AutoCompleteSymptomToAdd после того, как использовали его для CheckSymptomInHistory.Я бы поставил нулевую проверку перед CheckSymptomInHistory, в противном случае вы можете быть подвергнуты NullReferenceException:

if (AutoCompleteSymptomToAdd == null)
{
    // Display an error message?
    return;
}

// AutoCompleteSymptomToAdd is not null, proceed to use it
CheckSymptomInHistory(AutoCompleteSymptomToAdd.Id);

Я бы тогда изменил тип возврата CheckSymptomInHistory, чтобы вернуть bool, вот так:

bool CheckSymptomInHistory(string id)
{
    foreach (string item in SymptomHistoryIDs)
    {
        if (id == item)
        {
            return true;
        }
    }

    return false;
}

Затем в вашем обработчике проверьте тип возврата метода CheckSymptomInHistory следующим образом:

bool isSymptomInHistory = CheckSymptomInHistory(AutoCompleteSymptomToAdd.Id);
if (isSymptomInHistory)
{
    await DisplayAlert("Historical Symptom", "This symptom is in your history - Please restore from here", "OK");
    return;
}

// Symptom is not in history, carry on as normal
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...