Форум программистов, компьютерный форум CyberForum.ru

Xamarin

Войти
Регистрация
Восстановить пароль
 
 
user20011993
9 / 9 / 0
Регистрация: 19.10.2012
Сообщений: 391
#1

Хранение данных в приложении без бд - Xamarin

08.09.2016, 15:42. Просмотров 1001. Ответов 22
Метки нет (Все метки)

Всем привет.
Как лучше хранить небольшое количество информации, типа данных пользователя, настроек приложения, на устройстве? Первое что пришло в голову - сразу привинтить бд и считать себя классным, но это ж скажется на размере приложения. А хранить надо какую-то пару килобайт информации. Еще проскочила мысль про блокнотный файлик. Но тут мне сама затея работы с файлом не нравится. Не лабораторная все-таки. Но это все субъективно пока я не знаю какие методы решения сей дилеммы вообще есть, и какой мне лучше подходит.
Спасибо заранее
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
lvlkoo
.NET C#,ASP.NET MVC
 Аватар для lvlkoo
334 / 290 / 101
Регистрация: 16.10.2010
Сообщений: 1,280
Завершенные тесты: 2
08.09.2016, 21:00     Хранение данных в приложении без бд #2
А как же андроидовский SharedPrefernces? Забыли о нем?
stele
14 / 14 / 8
Регистрация: 29.02.2016
Сообщений: 53
08.09.2016, 21:03     Хранение данных в приложении без бд #3
Если не нравится что-то устройствоспецифичное типа DefaultSharedPreferences, то можно использовать почти универсальную сериализацию-десериализацию Xml.
user20011993
9 / 9 / 0
Регистрация: 19.10.2012
Сообщений: 391
09.09.2016, 15:16  [ТС]     Хранение данных в приложении без бд #4
спасибо, использую DefaultSharedPreferences.
еще вопрос тут же, а то слишком много тем наплодил
решил переделать структуру приложения. попробую найти более удачный вариант. и сразу столкнулся с такой штукой: у меня страницы приложения это фрагменты. из библиотеки Android.Support.V4. т.е. они для дроидной части приложения. но я хочу попробовать это еще и на ios запустить(за кросплатформенностью же гонюсь). получается, мне нужно искать библиотеки с реализацией фрагментов для ios? и в яблочной части приложения еще раз все реализовывать? получается что я сейчас делаю только для андроид
stele
14 / 14 / 8
Регистрация: 29.02.2016
Сообщений: 53
09.09.2016, 16:29     Хранение данных в приложении без бд #5
Или использовать Xamarin Forms. Они якобы кроссплатформенны. Или разделять логику работы приложения на обработку данных и отображение данных (как это будет в переводе back-end и front-end ). В студии создаётся Общий проект. В нём идёт обработка данных или общая логика для всех платформ. И в этом же решении создаются проекты под каждую платформу (можно любые и десктоп и мобильные) в которых просто показывается то что делается в общем проекте или реализуются какие-то платформоспецифичные вещи. Условно это выглядит так как бы исходный код из общего проекта вставляется в исходный код платформенных проектов. И повторно одно и тоже под все платформы писать не надо.
lvlkoo
.NET C#,ASP.NET MVC
 Аватар для lvlkoo
334 / 290 / 101
Регистрация: 16.10.2010
Сообщений: 1,280
Завершенные тесты: 2
09.09.2016, 17:10     Хранение данных в приложении без бд #6
Цитата Сообщение от user20011993 Посмотреть сообщение
спасибо, использую DefaultSharedPreferences.
еще вопрос тут же, а то слишком много тем наплодил
решил переделать структуру приложения. попробую найти более удачный вариант. и сразу столкнулся с такой штукой: у меня страницы приложения это фрагменты. из библиотеки Android.Support.V4. т.е. они для дроидной части приложения. но я хочу попробовать это еще и на ios запустить(за кросплатформенностью же гонюсь). получается, мне нужно искать библиотеки с реализацией фрагментов для ios? и в яблочной части приложения еще раз все реализовывать? получается что я сейчас делаю только для андроид
Есть два варианта разработки
1. Xamarin Forms, с помощью которого рисуете общий интерфейс на основе этого фреймворка, либо с помощью кода (что типо win-forms) либо xamal. При этом код тоже общий (сооствевенно доступ к спицефическим апи, работа с которыми координально отличается в двух платформах будут недоступны)

2. Общий код логики, отдельно нативные интерфейсы, отдельно доступ к апи платформы

Добавлено через 38 секунд
Цитата Сообщение от stele Посмотреть сообщение
Они якобы кроссплатформенны.
Почему якобы? Они кросфлатформенны.
stele
14 / 14 / 8
Регистрация: 29.02.2016
Сообщений: 53
09.09.2016, 17:23     Хранение данных в приложении без бд #7
Цитата Сообщение от lvlkoo Посмотреть сообщение
Почему якобы? Они кросфлатформенны.
Некоторое время назад (но уже когда они стали бесплатными) у них на сайте было написано что-то в духе что они конечно кросплатформенны, но может быть всё что угодно и для стабильности пользуйтесь нативными компонентами платформ.
user20011993
9 / 9 / 0
Регистрация: 19.10.2012
Сообщений: 391
12.09.2016, 15:56  [ТС]     Хранение данных в приложении без бд #8
и снова запнулся: делаю регистрацию пользователя в приложении. пробую авторизацию через facebook. проблема вот в чем: после того как я авторизовываюсь через fb, нужно как то получить результат этой авторизации чтобы перейти на следующий экран приложения-на главный экран если успех, либо на...какой-нибудь другой. локальной регистрации, например.
можно получить токен состояния авторизации на fb, но мне это в данной ситуации не подходит. мои мысли такие - нажал на fb -> ввел/не ввел данные -> операция завершена, есть ее результат. не придумал как отследить завершение этой операции
спасибо
lvlkoo
.NET C#,ASP.NET MVC
 Аватар для lvlkoo
334 / 290 / 101
Регистрация: 16.10.2010
Сообщений: 1,280
Завершенные тесты: 2
12.09.2016, 16:44     Хранение данных в приложении без бд #9
Цитата Сообщение от stele Посмотреть сообщение
Некоторое время назад (но уже когда они стали бесплатными) у них на сайте было написано что-то в духе что они конечно кросплатформенны, но может быть всё что угодно и для стабильности пользуйтесь нативными компонентами платформ.
Там вроде всегда было написано, что
Цитата Сообщение от user20011993 Посмотреть сообщение
и снова запнулся: делаю регистрацию пользователя в приложении. пробую авторизацию через facebook. проблема вот в чем: после того как я авторизовываюсь через fb, нужно как то получить результат этой авторизации чтобы перейти на следующий экран приложения-на главный экран если успех, либо на...какой-нибудь другой. локальной регистрации, например.
можно получить токен состояния авторизации на fb, но мне это в данной ситуации не подходит. мои мысли такие - нажал на fb -> ввел/не ввел данные -> операция завершена, есть ее результат. не придумал как отследить завершение этой операции
спасибо
Чем пользуетесь? Напрямую отправляете oauth запросы? Или facebook sdk?
user20011993
9 / 9 / 0
Регистрация: 19.10.2012
Сообщений: 391
12.09.2016, 16:49  [ТС]     Хранение данных в приложении без бд #10
lvlkoo, facebook android sdk
lvlkoo
.NET C#,ASP.NET MVC
 Аватар для lvlkoo
334 / 290 / 101
Регистрация: 16.10.2010
Сообщений: 1,280
Завершенные тесты: 2
12.09.2016, 16:56     Хранение данных в приложении без бд #11
Сообщение было отмечено автором темы, экспертом или модератором как ответ
user20011993, документацию читали?

Релизуйте интрефейс IFacebookCallback, регистрируете "слушатель"

C#
1
LoginManager.Instance.RegisterCallback(yourCallbackManager, callbackListener);
Интерфейс содержит функции OnSuccess, OnCancel и OnError

Соответственно получаете колбек "завершения операции" на основе него выполняйте необходимые вам вещи.
user20011993
9 / 9 / 0
Регистрация: 19.10.2012
Сообщений: 391
14.09.2016, 15:51  [ТС]     Хранение данных в приложении без бд #12
и еще порция нубовопросов =)
теперь про авторизацию в вк через oauth2.0.
нашел пример, где доходчиво рассказали как АВТОРИЗОВАТЬСЯ - получить токен, инфо опользователе. теперь время жизни(24 часа) этого токена тикает на сервере вк, и для него я вроде авторизован, пока есть токен он со мной будет общаться. но у меня возникает ряд вопросов:
как мне мониторить время жизни этого токена? на первый взгляд мне кажется что как только сутки пройдут, пользователя должно выкинуть из авторизации, ведь ни кто не продлил токен.
из примера по ссылке следует что как только токен передан в приложение, за его(токена) судьбу отвечает программист. ок. в том же примере его привели к строке и положили в переменную. можно даже сохранить в памяти устройства. в этом виде его можно отправить в вк как параметр для некоторых методов. но нет метода на продление токена или повторную авторизацию, если пользователь закрывал приложение не разлогиниваясь, потом снова открыл, и нужно налаживать связь с вк. ах да-пользователь не сможет разлогиниться, т.к. метода для этого тоже нет в доках...
искал документацию, но там нет ответа на эти вопросы. (не исключаю что нашел не то или смотрел не туда. щас еще продолжу поиски)

заранее спасибо)
lvlkoo
.NET C#,ASP.NET MVC
 Аватар для lvlkoo
334 / 290 / 101
Регистрация: 16.10.2010
Сообщений: 1,280
Завершенные тесты: 2
14.09.2016, 16:25     Хранение данных в приложении без бд #13
user20011993, Документация сторонний библиотеки тут не причем, либа только запросы делает. Вы в первую очередь должны читать официальную документацю, в данном случае документацю АПИ вконтакте. Я допустим там нашел метод проверки валидности токена.

Так же в любом случае, вы будете получать сообщения об ошибке при попытки запроса с просроченным токеном, вам просто нужно их обработать.

Логику свою соответственно выстраивайте сами, либо каждый раз токен проверять, либо хранить время токена локально в приложении, либо обрабатывать ошибки. Хотя по идее должно быть все сразу.
user20011993
9 / 9 / 0
Регистрация: 19.10.2012
Сообщений: 391
16.09.2016, 16:00  [ТС]     Хранение данных в приложении без бд #14
нашел реализацию api vk для .Net. с ней вроде можно сделать все что мне надо. но при установке образуется ошибка
Could not install package 'VkNet 1.23.0'. You are trying to install this package into a project that targets 'MonoAndroid,Version=v6.0', but the package does not contain any assembly references or content files that are compatible with that framework. For more information, contact the package author.
в инете пишут мол обнови nuget. обновил через tools-extnsions and updates-visual studio gallery. не помогло. продолжил гуглить-нашел что не сталкивались с такой ошибкой.
ну и раз про ошибки начал - пришли обновления на xamarin for visual studio. скачал, но при попытке установить возникает ошибка с открытием журнала установки. (Win 7). первый раз такую ошибку вижу...
спасибо)

Добавлено через 46 минут
вопрос снят. она не работает для мобильных
user20011993
9 / 9 / 0
Регистрация: 19.10.2012
Сообщений: 391
19.09.2016, 14:21  [ТС]     Хранение данных в приложении без бд #15
столкнулся с еще одной интересной проблемой - после авторизации в вк нужно сразу перенаправить пользователя на другой экран.

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
vkLogin.Click += delegate 
            {//т.к. токен получаю постоянный, то храню его в отдельной переменной. если токен в ней есть, то пробую
 скопировать ее в "рабочую" переменную методом RepairVkToken. от булевский результат возвращает. в общем если у нас
 получилось найти токен, то мы переходим на другие экраны
                if (info.RepairVkToken() && (info.getVkToken() != "null" && info.getVkToken() != "" && info.getVkToken() != null))
                {
                    if (info.checkUserInfo())
                    {
                        context.ShowMainFragment(this);
                    }
                    else
                    {
                        context.ShowUserInfoFragment(this);
                    }
                }
                else { //а это, соответственно, если не нашли токен, т.е. первый вход.
                    var auth = new OAuth2Authenticator(
                    clientId: "5628496",
                    scope: "friends,offline",
                    authorizeUrl: new Uri("https://oauth.vk.com/authorize"),
                    redirectUrl: new Uri("https://oauth.vk.com/blank.html"));
                    auth.AllowCancel = true;
                    auth.Completed += (s, ee) => {
                        if (!ee.IsAuthenticated)
                        {
                            var builder = new AlertDialog.Builder(context);
                            builder.SetMessage("Not Authenticated");
                            builder.SetPositiveButton("Ok", (o, e) => { });
                            builder.Create().Show();
                            return;
                        
                        }
                        else
                        {
                            token = ee.Account.Properties["access_token"].ToString();
                            userId = ee.Account.Properties["user_id"].ToString();                           
                            info.setVkToken(ee.Account.Properties["access_token"].ToString());
                            info.setUserLog();//переводим пользователя в состояние авторизованного в приложении.
                            if (info.checkUserInfo())
                            {
                                context.ShowMainFragment(this);//вот тут проблема: я пытаюсь вызвать фрагмент, 
принадлежащий другой активити, пока не закрылась активити вк. 
                            }
                            else
                            {
                                context.ShowUserInfoFragment(this);
                            }
 
                           
                         }
                        
                    };
                    var intent = auth.GetUI(context);
                    StartActivity(intent);
                    
 
                    //еще пробовал сделать последовательно-сначала отрабатывает активити, потом я смотрю результаты. но вот фиг. запускается активити, и тут же идет выполнение кода ниже. вот тут хочется применить что то типа async/await, но я раньше не сталкивался с асинхронностью, и пока не получается...
                    if (info.getVkToken() != "null")
                    {
                        info.setUserLog();
                        if (info.checkUserInfo())
                        {
                            context.ShowMainFragment(this);
                        }
                        else
                        {
                            context.ShowUserInfoFragment(this);
                        }
                    }
можно ли прослушать событие закрытия этой активности? или вариант с асинхронностью, и как его туда запихать...
а еще буду рад услышать замечания по логике этой самой авторизации.
спасибо)
lvlkoo
.NET C#,ASP.NET MVC
 Аватар для lvlkoo
334 / 290 / 101
Регистрация: 16.10.2010
Сообщений: 1,280
Завершенные тесты: 2
19.09.2016, 14:27     Хранение данных в приложении без бд #16
user20011993, пробуйте использовать StartActivityForResult
user20011993
9 / 9 / 0
Регистрация: 19.10.2012
Сообщений: 391
21.09.2016, 15:47  [ТС]     Хранение данных в приложении без бд #17
пытаюсь постить штуки на стенки в соц сетях. с вк вроде все получилось, но вот с фб пока нет. проблема с ShareLinkContent. создаю кнопку ShareButton, создаю
C#
1
ShareLinkContent с = new ShareLinkContent.Builder().Build())
, делаю
C#
1
button.ShareContent = с
запускаю, тыкаю, и в фейсбуковой форме возникает ошибка что должны быть заданы обязательные параметры url или media. но я не могу ничего задать. все параметры ShareLinkContent только для чтения. да и судя по описаниям должно вызываться окно, где надо писать что хочешь запостить...
lvlkoo
.NET C#,ASP.NET MVC
 Аватар для lvlkoo
334 / 290 / 101
Регистрация: 16.10.2010
Сообщений: 1,280
Завершенные тесты: 2
21.09.2016, 16:32     Хранение данных в приложении без бд #18
Цитата Сообщение от user20011993 Посмотреть сообщение
да и судя по описаниям должно вызываться окно, где надо писать что хочешь запостить...
По решению фейсубк - свободного доступа к постнигу на стену вы не имеете. Да, вы только можете вызвать интенте шаринга (окно), в которую можете прикрепить ссылку.

Цитата Сообщение от user20011993 Посмотреть сообщение
ошибка что должны быть заданы обязательные параметры url или media. но я не могу ничего задать.
Посмотрите Set - методы, часто бывает так что в оболочке xamarin ни все переведено на Propery или не все содержать setter'ы, для таким свойств обычно используется отдельный сет-метод. К примеру obj.SetContent(...)

Я давно работал с фб сдк, точно уже не помню, откройте интелсенс и посмотрите сет-методы, если не получится я подыму старые проекты, гляну
user20011993
9 / 9 / 0
Регистрация: 19.10.2012
Сообщений: 391
22.09.2016, 13:47  [ТС]     Хранение данных в приложении без бд #19
lvlkoo, разобрался как задавать параметры
C#
1
2
3
4
5
6
7
8
9
ShareButton shareButton = socials.FindViewById<ShareButton>(Resource.Id.send_post_fb);
 
            ShareLinkContent.Builder builder = new ShareLinkContent.Builder();
            builder.SetContentUrl(Android.Net.Uri.Parse("http://www.facebook.com"));
            builder.SetContentTitle("title to share"); //title
            builder.SetContentDescription("text to share"); //description 
            ShareContent cont = builder.Build();
 
            shareButton.ShareContent = cont;
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.09.2016, 13:52     Хранение данных в приложении без бд
Еще ссылки по теме:

Xamarin Анимированные объекты в приложении
Xamarin Авторизация в простом приложении

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

Или воспользуйтесь поиском по форуму:
lvlkoo
.NET C#,ASP.NET MVC
 Аватар для lvlkoo
334 / 290 / 101
Регистрация: 16.10.2010
Сообщений: 1,280
Завершенные тесты: 2
22.09.2016, 13:52     Хранение данных в приложении без бд #20
user20011993,
C#
1
.SetContentUrl(Uri.Parse("http://myawesomelink.blabla")).JavaCast<ShareLinkContent.Builder>()
Yandex
Объявления
22.09.2016, 13:52     Хранение данных в приложении без бд
Ответ Создать тему
Опции темы

Текущее время: 03:24. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru