Каков наилучший способ иметь дело с объектом JSON? - PullRequest
4 голосов
/ 30 ноября 2010

У меня есть большая строка, представляющая канал JSON.Мое приложение загружает этот фид из удаленного веб-сервиса.

Вопросы:

1) Где я должен сохранить фид JSON после загрузки?Прямо сейчас я храню его в настройках приложения, и он отлично работает.Мне просто интересно, есть ли какая-либо причина, чтобы этого не делать, или есть варианты лучше / быстрее, такие как Внутреннее хранилище или что-то еще?

2) Когда я собираюсь показать данные из этого канала в моемактивность, я делаю что-то вроде этого:

JSONObject jsonObj = new JSONObject(json_string);
JSONArray jsonArr = jsonObj.getJSONArray("root");
for (int m = 0; m < jsonArr.length(); m++) {
    ....
}

Проблема в том, что первая строка, которая анализирует фид JSON, довольно дорогая.При моем текущем размере (который может увеличиться в будущем), возможно, потребуется полсекунды для завершения, немного, но все еще проблема.Например, я нажимаю кнопку, чтобы вызвать действие (для отображения данных), и эта пауза на 1/2 секунды заметна и не хороша.

Чтобы избежать этой паузы, мне, вероятно, следует проанализировать JSON сразу после загрузки канала.Тогда возникает вопрос: где мне хранить разобранный объект JSON?

i) Я не могу сохранить объект JSON в настройках, поскольку там могут храниться только примитивные данные.

ii) Должен ли я выполнять анализкаждый раз, когда мое приложение запускается и делает мои проанализированные объекты JSON (у меня их больше) глобальными (на уровне приложения), чтобы я мог получить к ним доступ из всех своих действий?

iii) Или, я считаю, что мой третийможно было бы объявить объекты JSON статическими, чтобы к ним можно было легко получить доступ из других действий?

Каков наилучший способ сделать это?

THX.

Ответы [ 3 ]

3 голосов
/ 30 ноября 2010

Если скорость действительно является проблемой, простой способ значительно ускорить анализ (а также запись) данных JSON состоит в использовании Джексона для анализа данных JSON. По сравнению с библиотекой org.json (с которой поставляется Android SDK) она по крайней мере в 3–5 раз быстрее, если вы просто хотите анализировать карты или списки (http://www.cowtowncoder.com/blog/archives/2009/02/entry_204.html). Но если вы можете связать его с объектами Java, он все же быстрее и потребляет меньше памяти.

Если вы хотите сохранить данные JSON, они обычно просто сериализуются в виде файлов или в виде больших двоичных объектов в базах данных; но если вам действительно не нужно, лучше просто придерживаться объектов Java, созданных из данных JSON.

1 голос
/ 30 ноября 2010

Похоже, вам следует использовать базу данных SQLite для хранения значений, которые вы извлекаете из JSON.Это должно помочь вам начать: http://developer.android.com/guide/topics/data/data-storage.html#db

Все ваши действия в приложении могут затем запрашивать данные в базе данных.Если вы используете ListView для просмотра информации, вы можете использовать CursorAdapter для удобного заполнения списка.

Вы даже можете создать Content Provider поделиться этой информацией с другими приложениями

1 голос
/ 30 ноября 2010

Вам нужно хранить его?Если вы скачали его один раз с веб-страницы, и это все, что вам нужно, его можно сохранить в общих настройках.Если вам нужно получить его много, зачем его хранить?Вы также можете сохранить его в каталоге кеша

...