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

Программирование Android

Войти
Регистрация
Восстановить пароль
 
 
Tester64
396 / 357 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
#1

SharedPreferences сохранить на флешку - Программирование Android

01.09.2016, 22:24. Просмотров 297. Ответов 16
Метки нет (Все метки)

Гуру, САБЖ!

Есть ли СТАНДАРТНОЕ решение для подобного?

Хочу сохранять настройки в папку на внешнюю "флешку" (ExternalStorage).
Использовать для мелкой утилиты базу не охота.
Как и писать сложный класс для надежной перезаписи XML...
Да и стандартные активити для работы с Preferences терять не охота...

Может находили подобное? (слегка раздражает что при удалении программы теряются все настройки)
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.09.2016, 22:24
Здравствуйте! Я подобрал для вас темы с ответами на вопрос SharedPreferences сохранить на флешку (Программирование Android):

Можно ли ArrayList с числами сохранить в SharedPreferences? - Программирование Android
Ребят, у меня есть ArrayList с 12 числами, как его можно сохранить SharedPreferences, ведь там идет работа с примитивными типами? Если кто...

SharedPreferences - Программирование Android
String PR = "key"; SharedPreferences mySharedPreferences = getSharedPreferences(PR, Activity.MODE_PRIVATE); String...

SharedPreferences - Программирование Android
как сохранить целое значение в SharedPreferences?

SharedPreferences - Программирование Android
Можно как-то сохранить SharedPreferences файл после перезагрузки девайса? P.S. как хранятся данные на девайсе в приложении Вк и ему...

SharedPreferences - Программирование Android
выручайте, в чем ошибка? выводит 94 и 95, а должно 84 и 85 public class MainActivity extends Activity { Intent intent; ...

SharedPreferences - Программирование Android
Всем привет, вопрос: Как через SharedPreferences сохранять "String текст", я многое перепробовал но вылет... Вылет... Не могли бы...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
ExFau$t
298 / 274 / 48
Регистрация: 08.05.2012
Сообщений: 1,458
01.09.2016, 23:46 #2
Tester64, http://developer.alexanderklimov.ru/...references.php
0
Tester64
396 / 357 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
02.09.2016, 10:37  [ТС] #3
Цитата Сообщение от ExFau$t Посмотреть сообщение
Я про это и говорю! У меня настройки ВСЕГДА пишутся на встроенную флешку в системную папку программы.
И удаляются вместе с программой! (может я не заметил какой-то параметр, меняющий это?)

А я хочу сохранять настройки на внешнюю флешку - чтобы при удалении программы они сохранялись!
(настроек много - больше 10 - клиент долго набирает, а программу может "снести" случайно или временно ради выделения памяти для другой программы)
0
CoolMind
419 / 402 / 65
Регистрация: 06.10.2012
Сообщений: 1,727
02.09.2016, 11:12 #4
Tester64, если есть доступ к аккаунту Google, то можно сохранять на Google Drive, но это отдельный мир с глючным и постоянно меняющимся API, мне год назад хватило.
Вроде, есть же стандартные функции для доступа к карте памяти и соответствующей папке на ней (если карта памяти вообще есть).
0
ExFau$t
298 / 274 / 48
Регистрация: 08.05.2012
Сообщений: 1,458
02.09.2016, 12:03 #5
Tester64,

Сохранение настроек на SD-карту

Сам файл с настройками хранится в системе и обычному пользователю он не виден. Если вам понадобится получить все значения, хранимые в настройках, то вы можете считать все данные при помощи метода getAll() и записать их в файл, который можно сохранить на SD-карте:

Java
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
private void saveSharedPreferences()
{
    // создадим для примера несколько строчек с настройками. Вы можете пропустить этот код
    SharedPreferences prefs = getSharedPreferences("MyPrefs", MODE_PRIVATE);
    SharedPreferences.Editor prefEdit = prefs.edit();
    prefEdit.putBoolean("SomeBooleanValue_True", true);
    prefEdit.putInt("SomeIntValue_100", 100);
    prefEdit.putFloat("SomeFloatValue_1.11", 1.11f);
    prefEdit.putString("SomeStringValue_Unicorns", "Unicorns");
    prefEdit.commit();
 
    // Теперь сам пример
    File myPath = new File(Environment.getExternalStorageDirectory().toString());
    File myFile = new File(myPath, "MySharedPreferences");
 
    try
    {
        FileWriter fw = new FileWriter(myFile);
        PrintWriter pw = new PrintWriter(fw);
 
        Map<String,?> prefsMap = prefs.getAll();
 
        for(Map.Entry<String,?> entry : prefsMap.entrySet())
        {
            pw.println(entry.getKey() + ": " + entry.getValue().toString());            
        }
 
        pw.close();
        fw.close();
    }
    catch (Exception e)
    {
        // what a terrible failure...
        Log.wtf(getClass().getName(), e.toString());
    }
}
Источник:http://developer.alexanderklimov.ru/...p#savetosdcard

Добавлено через 55 секунд
Иногда полезно гуглить и листать до конца.
1
Pablito
2494 / 1939 / 605
Регистрация: 12.05.2014
Сообщений: 6,801
Завершенные тесты: 1
02.09.2016, 12:25 #6
https://firebase.google.com/docs/dat...android/start/
0
Tester64
396 / 357 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
02.09.2016, 13:18  [ТС] #7
Цитата Сообщение от ExFau$t Посмотреть сообщение
Иногда полезно гуглить и листать до конца.
Гуглил... часа полтора убил на английские источники....
Интересная идея с "резервным копированием" настроек. Думаю мне хватит
Немного магии и можно будет "спасти" настройки на случай удаления и восстановить при первом запуске...
Остальное не самое удобное! Лезет в онлайн, требует акаунта, надо писать свой диалог изменения настроек...
Многие советуют вообще в базе все хранить... можно, но требует "подготовки инструментов"
0
ExFau$t
298 / 274 / 48
Регистрация: 08.05.2012
Сообщений: 1,458
02.09.2016, 13:35 #8
Tester64, а зачем их вообще восстанавливать?
0
Tester64
396 / 357 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
02.09.2016, 13:41  [ТС] #9
Цитата Сообщение от ExFau$t Посмотреть сообщение
не хочешь заморачиваться - отправь по почте.
Ты же читал задание!
Мелкая утилита... куча настроек... стандартные активити для настроек... могут удалить!

причем здесь почта? я же сказал - не хочу ОНЛАЙН!

Если заморачиваться... можно написать свои активити для настроек работающие уже с данными на флешке или даже (куда лучше) с базой данных. Но... это займет больше недели вместе с тестами! А "резервное копирование" на флешку и назад можно за несколько часов отладить...
0
ExFau$t
298 / 274 / 48
Регистрация: 08.05.2012
Сообщений: 1,458
02.09.2016, 13:48 #10
Tester64, то есть пользователь удалил приложение и ты ему на память оставишь настройки во внешней памяти?
Если он удалил это его право и его проблемы, если придётся настраивать заново.
0
Tester64
396 / 357 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
02.09.2016, 13:51  [ТС] #11
Цитата Сообщение от ExFau$t Посмотреть сообщение
а зачем их вообще восстанавливать?
представь тебе надо ввести десяток-два настроек! Причем некоторые подбираются методами тестов - "не слишком рано - давай на пол часа раньше" "слишком высоко - давай на 3 пиксела уменьшим". После удаления все настройки теряются. Когда мне надо поставить что-нибудь ОГРОМНОЕ на телефон (например игрушку в 70-100мб) где не хватает уже места - я сношу маловажное, тестирую прогу, потом восстанавливаю то что удалил... еще раз подбирать/вспоминать настройки - это тяжело!

Добавлено через 1 минуту
Цитата Сообщение от ExFau$t Посмотреть сообщение
Если он удалил это его право и его проблемы, если придётся настраивать заново.
можно на галочку в тех-же настройках прописать "право на забвение" - "сохранять настройки на флешку"
0
ExFau$t
298 / 274 / 48
Регистрация: 08.05.2012
Сообщений: 1,458
02.09.2016, 13:55 #12
Tester64, ерунду говоришь, что за утилита у тебя, гиг весит чтоли? Да и если так сложно вс восстановить, а прога очень как нужна, пользователь её не удалит.

Добавлено через 1 минуту
Цитата Сообщение от Tester64 Посмотреть сообщение
можно на галочку в тех-же настройках прописать "право на забвение" - "сохранять настройки на флешку"
Ну пропиши:

Java
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
private void saveSharedPreferences()
{
    // создадим для примера несколько строчек с настройками. Вы можете пропустить этот код
    SharedPreferences prefs = getSharedPreferences("MyPrefs", MODE_PRIVATE);
    SharedPreferences.Editor prefEdit = prefs.edit();
    prefEdit.putBoolean("SomeBooleanValue_True", true);
    prefEdit.putInt("SomeIntValue_100", 100);
    prefEdit.putFloat("SomeFloatValue_1.11", 1.11f);
    prefEdit.putString("SomeStringValue_Unicorns", "Unicorns");
    prefEdit.commit();
 
    // Теперь сам пример
    File myPath = new File(Environment.getExternalStorageDirectory().toString());
    File myFile = new File(myPath, "MySharedPreferences");
 
    try
    {
        FileWriter fw = new FileWriter(myFile);
        PrintWriter pw = new PrintWriter(fw);
 
        Map<String,?> prefsMap = prefs.getAll();
 
        for(Map.Entry<String,?> entry : prefsMap.entrySet())
        {
            pw.println(entry.getKey() + ": " + entry.getValue().toString());            
        }
 
        pw.close();
        fw.close();
    }
    catch (Exception e)
    {
        // what a terrible failure...
        Log.wtf(getClass().getName(), e.toString());
    }
}
0
Tester64
396 / 357 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
02.09.2016, 14:17  [ТС] #13
Цитата Сообщение от ExFau$t Посмотреть сообщение
что за утилита у тебя, гиг весит чтоли?
Нет пока, но благодаря встроенным медиа-файлов может СИЛЬНО вырасти.
Например оффлайн просмотр каталога товаров - надо запомнить "любимое" или "изучить позже".
А можно даже настройки виджета запомнить - цвета, смещения, периоды обновления...

Цитата Сообщение от ExFau$t Посмотреть сообщение
Ну пропиши:
Я уже понял код... (просто не дочитал до конца http://developer.alexanderklimov.ru/) мне хватило идеи с копированием - остальное сам сделаю. Это уже легко!

...тяжелее просчитать КОГДА делать копию на флешку (после каждого изменения (не встречал "ресивера на изменение настроек" - надо свой обработчик прописывать)? по таймеру(раз в час/день)? при закрытии диалогога настроек? по клику в настройках? - думать надо!)
0
vindigo
18 / 18 / 3
Регистрация: 15.05.2014
Сообщений: 78
02.09.2016, 20:40 #14
Tester64, а почему не сохранить настройки без использования shared pref. Свой формат файла, типа INI там, свою папочку, настройки думаю много места не займут. Т.е. вручную программно записать файл и его же при надобности считывать. Или я что-то не так понял?
0
Tester64
396 / 357 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
02.09.2016, 20:51  [ТС] #15
Цитата Сообщение от vindigo Посмотреть сообщение
а почему не сохранить настройки без использования shared pref. Свой формат файла, типа INI там, свою папочку, настройки думаю много места не займут. Т.е. вручную программно записать файл и его же при надобности считывать. Или я что-то не так понял?
Еще раз (читай выше) - под СТАНДАРТНЫЕ shared pref есть КУЧА удобных механизмов общения с юзером! Целые активити создаваемые в одну строчку из XML файла - просто указываешь что это "галочка" и он выведет галочку, сам прочитает статус, и после изменения САМ запишет его в shared pref. А мне придется все это с нуля писать!!! Неделя-две работы вместе с тестами на надежность...

Цитата Сообщение от ExFau$t Посмотреть сообщение
Если он удалил это его право и его проблемы, если придётся настраивать заново.
вспомнил еще одну причину - "обнуление устройства" - я время от времени это делаю (восстанавливаю лишь клиенты/звонки/смс). После этого достаточно будет скачать программу из плея - настройки вернутся. Ведь при обнулении флешка не форматируется!
Кликните здесь для просмотра всего текста
Простой пример: моя программа https://play.google.com/store/apps/d...wms.wrem.clock
Там больше 20 настроек и 12 из них ТОЧНО прийдется подбирать "под себя" ("суточные циклы" - сон(ложимся)/работа(встаем)/личная жизнь(с работы) в будни, суботу и воскресенье). Даже я каждый раз вспоминаю когда у меня обычно будильник и во сколько стоит ложится - минут 5-10 на настройки уходит (сильно достало во время отладки).
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.09.2016, 20:51
Привет! Вот еще темы с ответами:

SharedPreferences - Программирование Android
Доброй ночи. Вышла заминка с бд класса SharedPreferences. Вообщем вот код: import android.app.Activity; import...

Array в SharedPreferences - Программирование Android
Добрый вечер! Вопрос заключается в том, можно ли сохранить настройки приложения с помощью SharededPreferences в виде массива? Нужно...

Сохранение в SharedPreferences - Программирование Android
Вобщем, я хочу сделать так, чтобы при нажатии на кнопку создавалась на экране ещё одна кнопка(и так можно сделать неограниченное количество...

SharedPreferences, HashMap - Программирование Android
Хочу сделать Save , Load в sharedPreferences и вывести результат в Log. не вижу ошибки :wall: Спасибо. public class...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
02.09.2016, 20:51
Ответ Создать тему
Опции темы

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