Плохо ли хранить данные JSON.stringify в SharedPreferences?

Я не могу выбрать между SQLite и SharedPreferences.

я могу использовать

JSON.parse(SharedPreferences.getString("data","qweqwe");

и

s.putString(key,JSON.stringify(JSONObject));

Или создайте новый большой класс для хранения моих (текстовых) данных в SQLite. (PS: JSON.* — мой собственный класс)

Что будет быстрее, лучше?

Я знаю, что SharedPreferences для данных "ключ-значение", SQLite - для большого количества структурированных данных. Но в моем случае хранение данных в формате JSON в SP и доступ по ключу было бы проще. Главный вопрос - будет ли он медленнее или быстрее? Плюсы и минусы?


person anony_root    schedule 30.05.2012    source источник
comment
С нетерпением жду комментариев сообщества по этому поводу, так как у меня тот же вопрос.   -  person dotty    schedule 30.05.2012
comment
@dotty мои рассуждения. О SQLite: мне нужно создать новые классы, я получаю данные JSON из URL-адреса, а с SQLite мне нужно будет написать в два раза больше кода, чтобы использовать эти данные. О SharedPreferences: я загружаю данные из URL, s.putString эти данные без каких-либо манипуляций, где я использую JSON.parse, я могу просто: JSON.parse( s.getString(jsdata,qweqwe).equals(qweqwe) ? JSON.get (url): s.getString(jsdata,qweqwe)) и несколько функций для обновления/манипулирования этими данными.   -  person anony_root    schedule 30.05.2012


Ответы (3)


С одной стороны, это немного субъективный вопрос (и не лучший вариант для stackoverflow). С другой стороны, если понимать название вашего вопроса буквально, объективный ответ будет "Нет, это не плохо".

Рассуждение, однако, несколько субъективно, поскольку оно «зависит» от ситуации.

Класс SharedPreferences фактически является оболочкой/помощником для файла, хранящегося в частном (внутреннем) хранилище приложения — насколько я понимаю, это файл XML. Основываясь на этом факте, спросите себя еще раз: «Плохо ли сохранять строку в формате JSON в файле XML»?

Как вы упомянули в комментарии к своему вопросу, использование базы данных SQLite будет означать написание дополнительного кода, тогда как преимущество SharedPreferences заключается в том, что данный файл настроек доступен по имени для любого класса Android, который расширяет Context, включая Application, Activity и Service.

person Squonk    schedule 30.05.2012
comment
В desc я написал более объективные вопросы. :) например что еще быстрее? - person anony_root; 31.05.2012
comment
@anony_root: Боюсь, у меня нет тестов, которые быстрее, и, опять же, это все еще немного субъективно и что-то, что нужно должным образом протестировать. Сохранение одной короткой строки JSON в любом случае может иметь разницу всего в несколько миллисекунд. Сохранение сотен (или тысяч) длинных строк может занять существенно разное количество времени. Если у вас есть простые требования, то SharedPreferences может быть подходящим вариантом, поскольку функциональность встроена во все классы на основе Context. - person Squonk; 31.05.2012

Я думал об этом и имел некоторую практику.

Таким образом, использование SQLite (в моем случае) лучше, чем использование строки в формате JSON в SharedPreferences, потому что я могу просто обновить только одну-две строки из таблицы. С SharedPreferences я должен:

  1. используйте 1_
  2. некоторые манипуляции с объектом
  3. отредактируйте мои SharedPreferences.
  4. приправы на ваш вкус
  5. Поместите мой JSONObject().toString() обратно в SharedPreferences. Это все.

ИМХО, это сложнее для устройства. Потому что его нельзя приправить

Если бы мне не нужно было обновлять отдельные части данных, я бы предпочел использовать SharedPreferences, потому что для статических данных, которые мне не нужно обновлять, это быстрее.

person anony_root    schedule 07.06.2012

Я использовал этот подход в нескольких проектах без каких-либо проблем. Но, безусловно, есть несколько преимуществ использования базы данных SQLite; в частности, функции управления версиями/обновления SQLite и мощный язык запросов SQL. Если вам когда-нибудь понадобится перенести данные в новую структуру хранилища, обратные вызовы upgrade и onUpgrade в среде SQLite могут оказаться очень полезными.

Если вы придерживаетесь простоты, JSON в настройках может быть очень быстрым и чрезвычайно простым в реализации. С точки зрения безопасности настройки немного более «открыты», чем база данных, поскольку они просто хранятся в формате xml, но в конечном итоге файл базы данных для базы данных SQLite хранится таким же образом и может быть прочитан во время вторжения.

У меня еще не было проблем с производительностью при использовании JSON/SharedPreferences, но я также не проводил профилирования, чтобы проверить это. Я стремился к тому, чтобы код оставался простым и не оптимизировался преждевременно — если возникают проблемы с производительностью, в этот момент выполняйте работу по его профилированию.

В конечном счете, я бы сказал, что в таком использовании SharedPreferences нет ничего плохого.

person Zambotron    schedule 30.05.2012