Я создал сервер Rails, содержащий :users
и связанный с ним :comments
. Он используется в качестве внутреннего API для клиента Android. Формат обмена для загрузки и хранения данных на сервере — JSON. Вот соответствующие миграции.
class CreateUsers < ActiveRecord::Migration
def change
create_table :users do |t|
t.string :name
t.timestamps
end
end
end
...
class CreateComments < ActiveRecord::Migration
def change
create_table :comments do |t|
t.references :users
t.string :subject
t.text :message
t.timestamps
end
end
end
Все пользователи уже импортированы. Поэтому для ресурса :users
настроен доступ только для чтения. Таким образом, для :comments
должна быть возможность добавления новых записей. Вот доступные маршруты.
user_comments GET /users/:user_id/comments(.:format) comments#index
POST /users/:user_id/comments(.:format) comments#create
new_user_comment GET /users/:user_id/comments/new(.:format) comments#new
user_comment GET /users/:user_id/comments/:id(.:format) comments#show
users GET /users(.:format) users#index
user GET /users/:id(.:format) users#show
На стороне клиента я использую Service
с AsyncTasks
для загрузки, анализа и сохранения пользователей в локальной базе данных SQLite. ContentProvider
доставляет кэшированных пользователей в пользовательский интерфейс. Пользовательский объект, загруженный с сервера, содержит уникальный идентификатор таблицы users
. Это должно быть полезно, когда на клиенте создается новый комментарий.
Intent
, который содержит пользовательский URI, например. content://com.example.myapp.provider/users/23
.CursorLoader
. (1)Я отметил шаги сценария, связанные со следующими вопросами.
CursorLoader
в активности пользователя? Обратите внимание, на данный момент я знаю только URI пользователя.Service
, который, с одной стороны, запускает задачи по загрузке, анализу и хранению комментариев на клиенте, а с другой — загружает, кодирует и отправляет комментарии на сервер?ContentProvider
для комментариев такой же, как и для пользователей? В приложении только один SQLiteOpenHelper
?Основная проблема, с которой я борюсь, заключается в том, как разработать приложение? Если вы знаете лучшее решение о том, как мне синхронизировать пользователей и связанные с ними комментарии, добро пожаловать.
Ответы на вопрос 1. и 3.
Я расширил модель REST следующим образом :Хэш JSON, возвращаемый для комментария , теперь включает идентификатор связанного пользователя .Тот же идентификатор также включен в хэш JSON для пользователя . Оба объекта хранятся в локальной базе данных на устройстве Android. Это позволяет мне запрашивать комментарии для конкретного пользователя . Я просто передаю идентификатор пользователя сервера как предложение WHERE
. URI контента для комментариев не каскадируется, как я подразумевал в своем вопросе. Он аналогичен пользовательскому URI контента :
content://com.example.myapp.provider.commentsprovider/comments
. Обратите внимание, что я изменил часть полномочий строки. Я решил создать отдельный контент-провайдер для пользователей и комментариев .