Форум программистов, компьютерный форум, киберфорум
Наши страницы

Программирование Windows Phone

Войти
Регистрация
Восстановить пароль
 
Максим2016
0 / 0 / 0
Регистрация: 16.12.2015
Сообщений: 5
#1

Как организовать логику приложения WebView - Windows Phone

22.12.2015, 14:06. Просмотров 311. Ответов 5
Метки нет (Все метки)

Здравствуйте, подскажите пожалуйста как организовать методы в коде (куда, какой) так, чтобы webview грузился с адреса сохраненного ранее в настройках? Сам механизм сохранения настроек я реализовал (по одной кнопке адрес сохраняется, по другой всплывает в сообщении) а сделать так что бы webview загрузился с сохраненного адреса ни как не могу.
Помогите пожалуйста.
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.12.2015, 14:06
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как организовать логику приложения WebView (Windows Phone):

Symfony 2: как правильно организовать бизнес-логику? - PHP
Всем привет! Вот я недавно начал один проект на Symfony 2 и сразу же столкнулся одной проблемой - организацией бизнес-логики. Например, у...

Пишу шашки на C#, как организовать логику игры - C#
Я пишу шашки, но пока что я начинающий сишарпер и мне нужно сформировать условие, а заключается оно в следующем: первые 2 IF организуют ход...

Как организовать логику работы двух CheckBox - C#
Пишу программу, которая ищет музыку или видио(или и то и то ) по компьютеру. имеется два CheckBox'a в которых задается что искать. ...

Создать программу тестирования, как организовать логику - C#
Уважаемые ФОРУМЧАНЕ! Нужна помощь. Работаю в ВУЗе. Надо сделать программу по тестированию знаний. Купить, как обычно в бюджетной...

Крестики нолики в WinForms - как организовать интерфейс и логику игры - C#
С чего нужно начать в коде ? Если хочу в Windows Forms сделать. Как создать массив это я знаю, а как этому массиву добавить квадратики...

Как лучше организовать бизнес-логику и сильно связанные сущности - C#
Доброго времени суток! Суть вот в чем. В модели Entity Framework (db first) имеется несколько сущностей, допустим "Заявка" и "Задача в...

5
vkiper
16 / 16 / 6
Регистрация: 11.11.2015
Сообщений: 48
22.12.2015, 19:36 #2
Я сам новичок в Win 10, но наберусь наглости тебе ответить, ибо вопрос выглядит простым, ИМХО.
В классе MainPage (а я надеюсь, он у тебя есть) имеется ф-я OnNavigatedTo(). В нее вставляешь примерно такой код:
C++
1
2
3
String^ myUrl = get-my-url-from-storage(); //это у тебя уже есть
Uri^ targetUri = ref new Uri(myUrl);
myWebView->Navigate(targetUri);
Сорри, что код на плюсах, концепуха везде одна.
Ну а объект myWebView должен быть объявлен в MainPage.xaml
Надеюсь, что угадал твою мысль.
1
Максим2016
0 / 0 / 0
Регистрация: 16.12.2015
Сообщений: 5
22.12.2015, 20:31  [ТС] #3
Спасибо за отклик, друг. В попытках развить обсуждение, представлю класс MainPage, дабы прояснить свою некомпетентность в C#, и выявить что именно я делаю не так. Так как логика в основе у нас совпала!
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
   
  public sealed partial class MainPage : Page
    {
 
        static String loadUrl = "http://ya.ru"; [B]//!!!!! Вот здесь я незнаю как вызвать get-url-from-storage(); 
[/B]
        private static readonly Uri HomeUri = new Uri(loadUrl, UriKind.Absolute);   
        public MainPage()
        {
            this.InitializeComponent();
            this.NavigationCacheMode = NavigationCacheMode.Required;
        }
 
        /// <summary>
        /// Вызывается перед отображением этой страницы во фрейме.
        /// </summary>
        /// <param name="e">Данные события, описывающие, каким образом была достигнута эта страница.
        /// Этот параметр обычно используется для настройки страницы.</param>
        protected override void OnNavigatedTo(NavigationEventArgs e)
        {
            WebViewControl.Navigate(HomeUri);
 
            HardwareButtons.BackPressed += this.MainPage_BackPressed;
        }
 
        /// <summary>
        /// Вызывается переходе с данной страницы.
        /// </summary>
        /// <param name="e">Данные о событиях, описывающие переход на эту страницу.</param>
        protected override void OnNavigatedFrom(NavigationEventArgs e)
        {
            HardwareButtons.BackPressed -= this.MainPage_BackPressed;
        }
 
        /// <summary>
        /// Переопределение нажатия кнопки "Назад" для навигации по обратному стеку веб-представления, а не приложения.
        /// </summary>
        private void MainPage_BackPressed(object sender, BackPressedEventArgs e)
        {
            if (WebViewControl.CanGoBack)
            {
                WebViewControl.GoBack();
                e.Handled = true;
            }
        }
 
        private void Browser_NavigationCompleted(WebView sender, WebViewNavigationCompletedEventArgs args)
        {
            if (!args.IsSuccess)
            {
                Debug.WriteLine("Navigation to this page failed, check your internet connection.");               
            }
        }
 
        /// <summary>
        /// Переход вперед по журналу веб-представления.
        /// </summary>
        private void ForwardAppBarButton_Click(object sender, RoutedEventArgs e)
        {
            if (WebViewControl.CanGoForward)
            {
                WebViewControl.GoForward();
            }
        }
        /// <summary>
        /// Вызываем сохранение и сразу чтение (чтобы задействовать только одну кнопку) требуемую инфор-ию.
        /// </summary>
 
        private async void SaveButton_Click(object sender, RoutedEventArgs e)
        {
            await writeXMLAsync();
            await readXMLAsync();
            //Вызываем всплывающее сообщение с сохраненной информацией
            MessageDialog msgbox = new MessageDialog("s", "" + loadUrl);
            await msgbox.ShowAsync();       
        }
           // извлекаем адрес и пишем в хранилище 
        private async Task writeXMLAsync()
        {
            Url u = new Url();
            u.NameUrl = WebViewControl.Source.ToString();
            var serializer = new DataContractSerializer(typeof(Url));
            using (var stream = await ApplicationData.Current.LocalFolder.OpenStreamForWriteAsync(
                "data.xml", CreationCollisionOption.ReplaceExisting))
            {
                serializer.WriteObject(stream, u);
            }
        }
         //извлекаем из хранилища
        private async Task readXMLAsync()
        {
            var serializer = new DataContractSerializer(typeof(Url));
 
            // проверка наличия файла
            bool existed = await FileExists(ApplicationData.Current.LocalFolder, "data.xml");
            if (existed)
            {
                using (var stream = await ApplicationData.Current.LocalFolder.OpenStreamForReadAsync("data.xml"))
                {
                    Url u = (Url)serializer.ReadObject(stream);
                    loadUrl = u.NameUrl;
                }
            }       
        }
        // проверка наличия файла
        public async Task<bool> FileExists(StorageFolder folder, string fileName)
        {
            return (await folder.GetFilesAsync()).Any(x => x.Name == fileName);
        }
   // нужен для реализации такого способа сохранения информации
        public class  Url
        {            
            public string NameUrl { get; set; }     
        }
   }
0
vkiper
16 / 16 / 6
Регистрация: 11.11.2015
Сообщений: 48
22.12.2015, 20:59 #4
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
ОК, попробуем разобраться.
Итак, два объекта (loadUrl и HomeUri) в начале просто создаешь/объявляешь, без значения.
Вот псевдокод, может компилятор Шарпа будет ругаться, главное, чтобы ты понял принцип:
C#
1
2
    static String loadUrl; //просто объявляешь
    private static readonly Uri HomeUri; //так же просто объявляешь
А ф-я OnNavigatedTo() будет выглядеть примерно так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
  protected override void OnNavigatedTo(NavigationEventArgs e)
  {
      await readXMLAsync();  // здесь считываешь сохраненное значание, от предыдущих сессий
    if (loadUrl == NULL) //если еще не сохранялось - задаешь дефолт
    {
      loadUrl = "http://ya.ru";
      HomeUri = new Uri(loadUrl, UriKind.Absolute);
    }
 
    WebViewControl.Navigate(HomeUri);
 
    HardwareButtons.BackPressed += this.MainPage_BackPressed;
  }
И, разумеется, чтобы или в конце сессии или по нажатию кнопки твой url сохранился в файл. А в ф-ии SaveButton_Click() вызывать только сохранение, чтение на данном этапе тебе уже не нужно.
1
Максим2016
0 / 0 / 0
Регистрация: 16.12.2015
Сообщений: 5
22.12.2015, 22:04  [ТС] #5
Здорово! Получилось!
Огромное человеческое спасибо тебе vkiper!

Получилось именно так как ты и задумал. Лишь HomeUri = new Uri(loadUrl, UriKind.Absolute); из проверки на null переменной адреса по умолчанию - вынес. Но вот что реально беспокоит, это как повлияло на код то, что в объявлении объекта Uri пришлось убрать модификатор "readonly".
Вот так все отлично работает:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
       
 static String loadUrl;
 private static Uri HomeUri;
 
 protected async override void OnNavigatedTo(NavigationEventArgs e)
        {
            await readXMLAsync();
            if (loadUrl == null) //если еще не сохранялось - задаешь дефолт
            {
                loadUrl = "http://ya.ru";                
            }
            HomeUri = new Uri(loadUrl, UriKind.Absolute);
            WebViewControl.Navigate(HomeUri);
            HardwareButtons.BackPressed += this.MainPage_BackPressed;
        }
0
vkiper
16 / 16 / 6
Регистрация: 11.11.2015
Сообщений: 48
23.12.2015, 10:25 #6
Но вот что реально беспокоит, это как повлияло на код то, что в объявлении объекта Uri пришлось убрать модификатор "readonly".
ИМХО, никак не должно повлиять.
1
23.12.2015, 10:25
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.12.2015, 10:25
Привет! Вот еще темы с ответами:

Как организовать логику работы клиента с серверной частью и множеством таблиц БД - C# WPF
Есть Клиентская часть на SilverLite и есть серверная часть, которая предоставляет Entity модель связи с БД. Из клиента можно забирать...

Как правильно составить логику приложения (игра)? - C#
Народ, выручайте советом! Я снова застрял на очередной задаче... Вот текст: Я застрял на этапе структурирования приложения....

Организовать логику кода - PHP БД
Мне не удаётся организовать логику кода, прошу вашей помощи Хочу сделать одну переменную как контейнер, то есть она будет принимать...

Qt creator. Есть файл aboutDialog.cpp/h с webview, как получить доступ к webview из mainWindow ? - C++ Qt
aboutDialog.h #ifndef ABOUTDIALOG_H_ #define ABOUTDIALOG_H_ #include &lt;QtGui/QDialog&gt; #include &lt;QtCore/QUrl&gt; class...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.