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

Xamarin

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

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

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

Всем привет.
Как лучше хранить небольшое количество информации, типа данных пользователя, настроек приложения, на устройстве? Первое что пришло в голову - сразу привинтить бд и считать себя классным, но это ж скажется на размере приложения. А хранить надо какую-то пару килобайт информации. Еще проскочила мысль про блокнотный файлик. Но тут мне сама затея работы с файлом не нравится. Не лабораторная все-таки. Но это все субъективно пока я не знаю какие методы решения сей дилеммы вообще есть, и какой мне лучше подходит.
Спасибо заранее
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.09.2016, 15:42
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Хранение данных в приложении без бд (Xamarin):

Хранение данных в приложении - C++ Qt
Здравствуйте!;) какие еще могут быть варианты хранения данных в пользовательском приложении, кроме xml-файлов и БД SQL??

Хранение учетных данных в приложении - Программирование Android
Как правильно хранить учетные данные (логин/пароль) в приложении, чтобы их не смогли узнать посторонние лица?

Хранение данных в приложении-справочнике - Программирование Android
Есть задача написать приложение со списком заведений города... Есть текстовой файл с набором данных в виде: Название организации, адрес,...

Хранение данных в приложении, какое хранилище предпочтительнее - C#
Добрый день, хочу задать оочень простой вопрос по хранению данных. Приложение получает данные (например парсит из .csv файла) по акциям...

Хранение данных (из БД) в приложении как singleton и визуальное программирование - C#
Хочу задать вопрос: как правильно организовать хранение данных (из БД) в приложении, доступе к ним в режиме singleton, и при этом иметь...

Хранение данных без базы - Java
Здравствуйте, скажите, пожалуйста, как можно сохранить данные (буквально 4-5 строчек), не используя базу? Что-то вроде...

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

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

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

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

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

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

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

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

Логику свою соответственно выстраивайте сами, либо каждый раз токен проверять, либо хранить время токена локально в приложении, либо обрабатывать ошибки. Хотя по идее должно быть все сразу.
1
user20011993
13 / 13 / 0
Регистрация: 19.10.2012
Сообщений: 537
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 минут
вопрос снят. она не работает для мобильных
0
user20011993
13 / 13 / 0
Регистрация: 19.10.2012
Сообщений: 537
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);
                        }
                    }
можно ли прослушать событие закрытия этой активности? или вариант с асинхронностью, и как его туда запихать...
а еще буду рад услышать замечания по логике этой самой авторизации.
спасибо)
0
19.09.2016, 14:21
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.09.2016, 14:21
Привет! Вот еще темы с ответами:

хранение и отображения данных без использования БД - Java
Ребят помогите с решением, вернее просто направьте в нужное русло нужно написать небольшую программку, которая хранила бы в себе...

Хранение малого количества данных без БД - Delphi БД
интересует вопрос хранения малого количества данных (менее 2 мб) в 1 файле. знаю что есть такие механизмы как JSON сериализация, XML...

Передача данных из вложенной функции в другую в приложении GUI без среды guide - Matlab
Поясните, пожалуйста, как передать матрицу M из первой вложенной функции во вторую: 1. function Rout 2. function ...

.NET 4.x Хранение информации в приложении - C#
Доброго времени суток. Пытаюсь разобраться с хранением данных в приложение. есть Класс MainVars class MainVars { private...


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

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

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