составить смс задачу в windows phone 7 c # - PullRequest
1 голос
/ 04 августа 2011

Я пытаюсь выполнить задачу composeSMS в Windows Phone 7. И у меня есть массив данных, извлекаемых из изолированного хранилища. Как я могу сделать это цикл, чтобы получить все данные в одном сообщении. Ниже приведен мой код, но он получает только последние данные.

private void sendSmsBtn_Click(object sender, RoutedEventArgs e)
{
    try
    {
        //For sorted time
        StreamReader readFileTime = new StreamReader(new IsolatedStorageFileStream(fullFolderName + "\\time.Schedule", FileMode.Open, myStore));

        //For time
        StreamReader readFileTime1 = new StreamReader(new IsolatedStorageFileStream(fullFolderName + "\\time1.Schedule", FileMode.Open, myStore));

        //For title
        StreamReader readFileTitle = new StreamReader(new IsolatedStorageFileStream(fullFolderName + "\\title.Schedule", FileMode.Open, myStore));

        //For category
        StreamReader readFileCategory = new StreamReader(new IsolatedStorageFileStream(fullFolderName + "\\category.Schedule", FileMode.Open, myStore));


        //Sorted time list
        String timeText = readFileTime.ReadLine();
        timeSplit = timeText.Split(new char[] { '^' });
            Array.Sort(timeSplit, delegate(string first, string second)
        {
            return DateTime.Compare(Convert.ToDateTime(first), Convert.ToDateTime(second));
        });


        String timeText1 = readFileTime1.ReadLine();

        timeSplit1 = timeText1.Split(new char[] { '^' });
        //Array.Sort(timeSplit1);

        String titleText = readFileTitle.ReadLine();
        titleSplit = titleText.Split(new char[] { '^' });
        Array.Sort(titleSplit);

        String categoryText = readFileCategory.ReadLine();
        categorySplit = categoryText.Split(new char[] { '^' });
        Array.Sort(categorySplit);
    }

    catch (Exception)
    {
    }



    SmsComposeTask composeSMS = new SmsComposeTask();

        for (int i = 0; i < timeSplit.Length; i++)
        {
            timeList = timeSplit[i];
            titleList = titleSplit[i];
            categoryList = categorySplit[i];


            composeSMS.Body = "Below is my schedule: \n" +
                              "Date: " + timeList + "\n" +
                              "Time: " + titleList + "\n" +
                              "End time: " + categoryList + "\n";

        }
        composeSMS.Show();
}

1 Ответ

2 голосов
/ 04 августа 2011

TL; DR: Вы постоянно задаете тело сообщения в цикле, а не добавляете к нему данные.Чтобы это работало, вам нужно иметь:

composeSMS.Body += "Below is my schedule: \n" +
                 "Date: " + timeList + "\n" +
                 "Time: " + titleList + "\n" +
                 "End time: " + categoryList + "\n";

Теперь позвольте мне отметить, что ваш код не оптимизирован и, как правило, может быть сокращен.Например, посмотрите на это:

private void sendSmsBtn_Click(object sender, RoutedEventArgs e)
{
    try
    {
        StreamReader reader;
        string[] timeSplit;
        string[] timeSplit1;
        string[] titleSplit;
        string placeholder;
        string[] categorySplit;

        //For sorted time
        using (reader = new StreamReader(new IsolatedStorageFileStream(fullFolderName + "\\time.Schedule", FileMode.Open, myStore))
        {
            placeholder = reader.ReadLine();
        }
        timeSplit = placeholder.Split(new char[] { '^' });
        Array.Sort(timeSplit, delegate(string first, string second)
        {
           return DateTime.Compare(Convert.ToDateTime(first), Convert.ToDateTime(second)); 
        }); 

        using (reader = new StreamReader(new IsolatedStorageFileStream(fullFolderName + "\\time1.Schedule", FileMode.Open, myStore))
        {
            placeholder = reader.ReadLine();
        }
        timeSplit1 = placeholder.Split(new char[] { '^' });
        Array.Sort(titleSplit1);

        using (reader = new StreamReader(new IsolatedStorageFileStream(fullFolderName + "\\title.Schedule", FileMode.Open, myStore)))
        {
            placeholder = reader.ReadLine();
        }
        titleSplit = placeholder.Split(new char[] { '^' });
        Array.Sort(titleSplit);

        using(reader = new StreamReader(new IsolatedStorageFileStream(fullFolderName + "\\category.Schedule", FileMode.Open, myStore)))
        {
            placeholder = readFileCategory.ReadLine();
        }

        categorySplit = placeholder.Split(new char[] { '^' });
        Array.Sort(categorySplit);
    }

    catch (Exception)
    {
    }

    var composeSMS = new SmsComposeTask();
    var sBuilder = new StringBuilder();
    sBuilder.AppendLine("Below is my schedule:");

    for (int i = 0; i < timeSplit.Length; i++)
    {
        sBuilder.AppendLine("Date: " + timeSplit[i]);
        sBuilder.AppendLine("Time: " + titleSplit[i]);
        sBuilder.AppendLine("End time: " + categorySplit[i]);
    }

    composeSMS.Body = sBuilder.ToString();
    composeSMS.Show();
}

ПРИМЕЧАНИЕ: Я редактировал ваш код в Блокноте, не имея доступа к компилятору.Могут потребоваться некоторые модификации.

Вот некоторые основные отличия от того, что у вас есть.

  • Я повторно использую тот же reader (экземплярStreamReader) снова и снова вместо создания новых экземпляров для каждого отдельного файла.
  • Обратите внимание на оператор using , используемый вдоль строк, где используется читатель.Также обратите внимание на фигурные скобки - таким образом, экземпляр reader будет правильно удален, как только я закончу работать с ним (чтение файла).
  • Вам нужен только один экземпляр строка-заполнитель строка, поскольку все строки составных строк нигде не используются.Эта строка placeholder сбрасывается при каждом чтении.
  • Я использую StringBuilder для построения тела и только когда он готов, я устанавливаю Body свойство.
  • Нет необходимости в промежуточных переменных внутри цикла.

Последний, но не менее важный совет.Вы должны реорганизовать способ хранения данных.Чтение четырех файлов в этом случае для создания единого объекта неправильно и требует много ресурсов.Подумайте об использовании единого хорошо структурированного формата (например, XML или JSON) для хранения данных в одном файле.Более того, рассмотрите возможность использования базы данных (начиная с SDK v.7.1 есть поддержка SQL CE).

...