420 / 357 / 47
Регистрация: 22.05.2013
Сообщений: 2,518
1

SharedPreferences сохранить на флешку

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

Author24 — интернет-сервис помощи студентам
Гуру, САБЖ!

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

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

Может находили подобное? (слегка раздражает что при удалении программы теряются все настройки)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.09.2016, 22:24
Ответы с готовыми решениями:

Сохранить значения Spinner в SharedPreferences
Добавляю элементы списка (текст) в spinner через edittext в alertdialog Нужно чтобы этот список...

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

Как сохранить динамически созданные edittext в SharedPreferences
Подскажите пожалуйста, как сохранить данные в созданных edittext . import...

SharedPreferences
String PR = "key"; SharedPreferences mySharedPreferences = getSharedPreferences(PR,...

16
1570 / 1168 / 426
Регистрация: 08.05.2012
Сообщений: 5,219
01.09.2016, 23:46 2
Tester64, http://developer.alexanderklim... rences.php
0
420 / 357 / 47
Регистрация: 22.05.2013
Сообщений: 2,518
02.09.2016, 10:37  [ТС] 3
Цитата Сообщение от ExFau$t Посмотреть сообщение
Я про это и говорю! У меня настройки ВСЕГДА пишутся на встроенную флешку в системную папку программы.
И удаляются вместе с программой! (может я не заметил какой-то параметр, меняющий это?)

А я хочу сохранять настройки на внешнюю флешку - чтобы при удалении программы они сохранялись!
(настроек много - больше 10 - клиент долго набирает, а программу может "снести" случайно или временно ради выделения памяти для другой программы)
0
426 / 406 / 68
Регистрация: 06.10.2012
Сообщений: 1,748
02.09.2016, 11:12 4
Tester64, если есть доступ к аккаунту Google, то можно сохранять на Google Drive, но это отдельный мир с глючным и постоянно меняющимся API, мне год назад хватило.
Вроде, есть же стандартные функции для доступа к карте памяти и соответствующей папке на ней (если карта памяти вообще есть).
0
1570 / 1168 / 426
Регистрация: 08.05.2012
Сообщений: 5,219
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.alexanderklim... vetosdcard

Добавлено через 55 секунд
Иногда полезно гуглить и листать до конца.
1
2883 / 2295 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
02.09.2016, 12:25 6
https://firebase.google.com/do... oid/start/
0
420 / 357 / 47
Регистрация: 22.05.2013
Сообщений: 2,518
02.09.2016, 13:18  [ТС] 7
Цитата Сообщение от ExFau$t Посмотреть сообщение
Иногда полезно гуглить и листать до конца.
Гуглил... часа полтора убил на английские источники....
Интересная идея с "резервным копированием" настроек. Думаю мне хватит
Немного магии и можно будет "спасти" настройки на случай удаления и восстановить при первом запуске...
Остальное не самое удобное! Лезет в онлайн, требует акаунта, надо писать свой диалог изменения настроек...
Многие советуют вообще в базе все хранить... можно, но требует "подготовки инструментов"
0
1570 / 1168 / 426
Регистрация: 08.05.2012
Сообщений: 5,219
02.09.2016, 13:35 8
Tester64, а зачем их вообще восстанавливать?
0
420 / 357 / 47
Регистрация: 22.05.2013
Сообщений: 2,518
02.09.2016, 13:41  [ТС] 9
Цитата Сообщение от ExFau$t Посмотреть сообщение
не хочешь заморачиваться - отправь по почте.
Ты же читал задание!
Мелкая утилита... куча настроек... стандартные активити для настроек... могут удалить!

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

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

Добавлено через 1 минуту
Цитата Сообщение от ExFau$t Посмотреть сообщение
Если он удалил это его право и его проблемы, если придётся настраивать заново.
можно на галочку в тех-же настройках прописать "право на забвение" - "сохранять настройки на флешку"
0
1570 / 1168 / 426
Регистрация: 08.05.2012
Сообщений: 5,219
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
420 / 357 / 47
Регистрация: 22.05.2013
Сообщений: 2,518
02.09.2016, 14:17  [ТС] 13
Цитата Сообщение от ExFau$t Посмотреть сообщение
что за утилита у тебя, гиг весит чтоли?
Нет пока, но благодаря встроенным медиа-файлов может СИЛЬНО вырасти.
Например оффлайн просмотр каталога товаров - надо запомнить "любимое" или "изучить позже".
А можно даже настройки виджета запомнить - цвета, смещения, периоды обновления...

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

...тяжелее просчитать КОГДА делать копию на флешку (после каждого изменения (не встречал "ресивера на изменение настроек" - надо свой обработчик прописывать)? по таймеру(раз в час/день)? при закрытии диалогога настроек? по клику в настройках? - думать надо!)
0
20 / 20 / 3
Регистрация: 15.05.2014
Сообщений: 80
02.09.2016, 20:40 14
Tester64, а почему не сохранить настройки без использования shared pref. Свой формат файла, типа INI там, свою папочку, настройки думаю много места не займут. Т.е. вручную программно записать файл и его же при надобности считывать. Или я что-то не так понял?
0
420 / 357 / 47
Регистрация: 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/... wrem.clock
Там больше 20 настроек и 12 из них ТОЧНО прийдется подбирать "под себя" ("суточные циклы" - сон(ложимся)/работа(встаем)/личная жизнь(с работы) в будни, суботу и воскресенье). Даже я каждый раз вспоминаю когда у меня обычно будильник и во сколько стоит ложится - минут 5-10 на настройки уходит (сильно достало во время отладки).
0
ExFau$t
02.09.2016, 21:16
  #16

Не по теме:

Tester64, просто сделай несколько пакетов настроек, и не парь мозг ни себе ни пользователям кучей непонятных настроек с убогим юзабилити.

0
Tester64
02.09.2016, 21:49  [ТС]     SharedPreferences сохранить на флешку
  #17

Не по теме:

Цитата Сообщение от ExFau$t Посмотреть сообщение
просто сделай несколько пакетов настроек,
Ты о чем??? Каких "пакетов"? Кто-то встает в 7, кто-то в 7:15, а кто-то в 10... А у кого-то вообще ночные смены... Тут у каждого СВОИ настройки! Причем меняются и подгоняются под жизнь (я зимой встаю позже чем летом).
А юзабилити... увы это все что давали "стандартные" диалоги SharedPreferences... А сочные цвета были удобны при отладке - проект еще не вышел на "про" версию - заброшен за неимением времени... И (если сделать "внешние" настройки, то туда лезть КРАЙНЕ редко придется - где-то раз в пол года).
Там-же планируется дать возможность менять цвета (диалогом выбора цвета) - а это еще десяток настроек "под юзера" которые очень ОБИДНО будет перенабирать при сбросе устройства.
Да и вообще, это мой ПЕРВЫЙ и пока единственный проект на плее...Может свои покажешь?

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.09.2016, 21:49

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

SharedPreferences
Всем привет, вопрос: Как через SharedPreferences сохранять &quot;String текст&quot;, я многое перепробовал...

SharedPreferences
выручайте, в чем ошибка? выводит 94 и 95, а должно 84 и 85 public class MainActivity extends...

SharedPreferences
как сохранить целое значение в SharedPreferences?


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru