Обработка / постоянство объектов Android - PullRequest
3 голосов
/ 25 сентября 2010

Я довольно далеко в своем первом приложении для Android, и у меня есть подозрение, что я «делаю это неправильно». Мое приложение общается с сервером Ruby on Rails и сериализует объекты туда и обратно через XML. Прежде чем я понял, что происходит, я оказался по колено в написании своего собственного дерьмового ORM, проблема, которая усугубляется тем фактом, что я не писал ни одной Java со средней школы.

Мой конфликт здесь заключается в том, что я хочу, чтобы мое клиентское (android) приложение могло сериализоваться с помощью различных методов, таких как HTTP / XML, в локальную базу данных или в локальную файловую систему. Я начал с паттерна «Стратегия», но мне кажется, что моего решения крайне не хватает.

С одной стороны, должен ли я повторно реализовать всю проверку модели Rails на стороне клиента, потому что я не знаю, буду ли я всегда работать с Rails на другой стороне? Еще большая проблема заключается в том, что сейчас я могу представлять только плоские объекты как значения ключа, так как мой код не может обрабатывать вложенные объекты, как истинный ORM.

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

Ответы [ 5 ]

1 голос
/ 17 января 2011

Гессиан отлично подходит для RPC.Вам не нужно делать сериализацию самостоятельно.Он не использует XML, поэтому он более эффективен и более подходит для мобильной платформы.

1 голос
/ 26 сентября 2010

Я бы не стал подходить к вашему Android-приложению как к расширению Ruby-приложения - скорее, потребителю API. Если вы можете попытаться представить ваше серверное приложение как JSON (или другой формат, но JSON является наиболее легковесным) и использовать эти API из вашего приложения Android, у вас, скорее всего, будет меньше проблем, поскольку JSON уже находится в формате K / V. *

Я еще не написал объекты Android в SQLite, но я записал их как объекты Parcelable и в SharedPreferences. Обе эти стратегии достаточны для небольших и средних приложений. Для приложений, интенсивно использующих данные, очевидно, вам придется сделать еще один шаг вперед к SQLite.

Есть несколько замечательных статей для этих подходов: Управление государством .

Это сводится к проектированию ваших объектов таким образом, чтобы их можно было легко сериализовать. Это означает отсутствие круговых ссылок или чрезвычайно сложных объектов. Это не должно быть очень большой проблемой, особенно если ваши данные уже в формате JSON. Вам просто нужно расширить некоторые классы и добавить функции, которые возвращают представление объекта Parcelable или строковое представление, чтобы ваши объекты могли быть сохранены таким образом.

Я бы не стал клонировать ваши объекты на стороне сервера и проверять их в Android, так как тогда требуется внести изменения в оба источника, если вы сделаете небольшие изменения. Сервер должен обрабатывать все данные и проверку, а вы должны просто запрашивать, кэшировать и отправлять данные с Android.

Мне было бы интересно узнать, есть ли какие-либо проблемы с записью объектов в SQLite, но я думаю, что это не намного больше шага по сравнению с деталями, которые я изложил выше. Надеюсь, это поможет в некотором качестве!

0 голосов
/ 18 ноября 2010

Глядя на ваш вопрос, у меня сложилось впечатление, что, может быть, вы просто слишком усложняете свои требования?Почему вы не можете просто использовать формат JSON для представления данных ваших объектов в переносимом виде?Тогда вы сможете просто сохранить его в файловой системе или в базе данных в простом текстовом поле.Вы можете использовать библиотеку android-active-record для прозрачного сохранения БД (http://code.google.com/p/android-active-record)

0 голосов
/ 26 сентября 2010

Я не сделал много постоянного хранения на Android, но я думаю, что вам нужно использовать SQLiteDatabase и создать свой собственный Cusor, который де / сериализует ваш объект, чтобы его можно было добавить в базу данных. Возможным решением будет расширение SQLiteCursor или AbstractCursor.

В противном случае я не думаю, что есть другое решение, кроме, возможно, «хардкорного» Serializabled (который, я подозреваю, может быть слишком большим для телефона, я могу ошибаться)

0 голосов
/ 26 сентября 2010

Я думаю, вы слишком тяжело работаете на смартфоне. Я хотел бы взглянуть на использование веб-сервисов в стиле RESTful с контентом JSON.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...