Нужен пример проекта клиента Android REST, который реализует шаблон реализации Virgil Dobjanschi REST


Я хочу построить клиент REST на телефоне android.

сервер REST предоставляет несколько ресурсов, например (GET)

http://foo.bar/customer      List of all customer
http://foo.bar/customer/4711    The customer with id 4711
http://foo.bar/customer/vip     List of all VIP customer

http://foo.bar/company           List of all companys
http://foo.bar/company/4711     The company with the ID 4711
http://foo.bar/company/vip      List of all VIP companys

Я (думаю) я знаю, как поговорить с сервером REST и получить необходимую мне информацию. Я бы реализовал клиентский класс REST с API, как это

public List<Customer> getCustomers();
public Customer getCustomer(final String id);
public List<Customer> getVipCustomer();

public List<Company> getCompanies();
public Customer getCompany(final String id);
public List<Customer> getVipCompanies();

сослался на презентацию " разработка клиентских приложений Android REST" от Dobjanschi Вергилия я узнал, что это не хорошая идея, чтобы справиться с остальными запрос в рабочий поток действия. Вместо этого я должен использовать сервис API.

мне нравится идея иметь одноэлементный ServiceHelper, который привязывается к (локальной) службе, но я боюсь, что я не понял концепцию службы правильно.

на данный момент я не понимаю, как сообщить результат вызова REST (сделанный asynchrounous в Службе) обратно к активности вызывающего абонента. Мне также интересно, Нужна ли мне одна служба, которая обрабатывает все запросы REST (с разными возвращаемые типы) или если мне нужна выделенная служба для каждого запроса REST.

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

пожалуйста, дайте мне знать!

любые другие предложения, которые указывают мне в правильном направлении реализации также полезны (Android API-Demo не соответствует моему варианту использования).

спасибо заранее.

Клаус

EDIT: Похожие темы найдены на SO (после публикации этого), которые ведут меня в нужном мне направлении (минимизация сложного "шаблона Добянщи"):

  • Android: restful API service
8 81

8 ответов:

обзор

Edit:

любой интерес также рассмотреть вопрос о взгляде на спокойный android это может дать вам лучший взгляд на это.

то, что я узнал из опыта при попытке реализовать модель Dobjanschi, заключается в том, что не все написано на камне, и он только дает вам обзор того, что делать это может измениться от приложения к приложению, но формула:

следуйте этим идеям + Добавить свой собственный = счастливый Android-приложение

модель на некоторых приложениях может отличаться от требования некоторые могут не нуждаться в учетной записи для SyncAdapter другие могут использовать C2DM, это тот, который я работал недавно может помочь кому-то:


создать приложение, которое имеет учетную запись и AccountManager

Это позволит вам использовать SyncAdapter для синхронизации ваших данных. Это уже обсуждалось на создать свой собственный SyncAdapter

создать ContentProvider (если это соответствует вашим потребностям)

эта абстракция позволяет не только получить доступ к базе данных, но и перейти к ServiceHelper для выполнения вызовов REST, поскольку он имеет метод сопоставления один на один с аркой REST.

контент-провайдер | остальные, способ

запрос ----------------> получить

вставить ----------------> ставь

обновление ----------------> Пост

удалить ----------------> удалить

ServiceHelper Отводками

этот парень будет в основном запускать(а) службы(ы), которые выполняют Http (не обязательно протокол, но это наиболее распространенный) метод REST с параметрами, которые вы передали из ContentProvider. Я передал целое число соответствия, полученное от UriMatcher на контент-провайдере, поэтому я знаю, к какому ресурсу REST получить доступ, т. е.

class ServiceHelper{

    public static void execute(Context context,int match,String parameters){
//find the service resource (/path/to/remote/service with the match
//start service with parameters 
    }

}

сервис

получает выполняется (я использую IntentService большую часть времени), и он переходит к RESTMethod с параметрами, переданными от помощника, что это хорошо? хорошо помню их работать в фоновом режиме.

также реализуйте BroadCastReceiver, чтобы, когда служба закончит свою работу, уведомить мою деятельность, которая зарегистрировала эту трансляцию и запрос снова. Я считаю, что этот последний шаг не на конференции Virgill, но я уверен, что это хороший способ пойти.

RESTMethod класс

принимает параметры, ресурс WS (http://myservice.com/service/path) добавляет параметры, подготавливает все, выполняет вызов и сохраняет ответ.

Если authtoken необходим вы можете запросить у AccountManager Если вызов службы не удался из-за проверки подлинности, можно аннулировать authtoken и reauth для получения нового маркера.

наконец, RESTMethod дает мне либо XML, либо JSON, независимо от того, что я создаю процессор на основе matcher и передать ответ.

процессор

Он отвечает за разбор ответа и вставляет его локально.

Пример Приложения? Конечно!

кроме того, если вы интересны на тестовом приложении вы смотрите на Eli-G, это может быть не лучший пример, но он следует подходу Service REST, он построен с помощью ServiceHelper, Processor, ContentProvider, Loader и Broadcast.

Программирование Android имеет полную Главу (13. Изучение поставщиков контента), посвященный "варианту B: используйте API ContentProvider" из Google I/O talk Вирджила.

мы не единственные, кто видит преимущества такого подхода. На конференции Google I/O в мае 2010 года Вирджил Добьянски из Google представил доклад, в котором были изложены следующие три модели использования контент-провайдеров для интеграции веб-сервисов RESTful в Android приложения...

в этой главе мы подробно рассмотрим второй паттерн с нашим вторым примером видео Finch; эта стратегия даст ряд важных преимуществ для ваших приложений. Благодаря элегантности, с которой этот подход интегрирует сетевые операции в Android MVC, мы дали ему прозвище "Network MVC."

будущее издание программирования Android может обратиться к двум другим подходам, а также документировать более подробную информацию об этом Google демонстрация. После того, как вы закончите читать эту главу, мы рекомендуем вам просмотреть Google talk.

настоятельно рекомендуется.

Программирование Android от Zigurd Mednieks, Laird Dornin, G. Blake Meike и Masumi Nakamura. Copyright 2011 O'Reilly Media, Inc., 978-1-449-38969-7.

" разработка клиентских приложений для Android REST " Вирджила Добьянски вызвала много дискуссий, поскольку исходный код не был представлен во время сессии или был предоставлен позже.

  • эталонная реализация доступна в разделе http://datadroid.foxykeep.com (сеанс ввода-вывода Google упоминается в разделе / презентация). Это библиотека, которую вы можете использовать в своем собственном приложении.
  • Очередь Приоритетных Заданий Android была вдохновлена Говорить Dobjanschi и звучит очень многообещающе для меня.

прокомментируйте, пожалуйста, если вы знаете больше реализаций.

мы разработали библиотеку, которая решает эту проблему:RoboSpice.

библиотека использует "сервисный подход", описанный Dobjanschi Вергилий и Нил Goodmann, но мы предлагаем все-в-одном решение, которое :

  • выполняется асинхронно (в фоновом режиме AndroidService) сети запросы, которые будут возвращать объекты POJO (например, REST-запросы)
  • кэширует результаты (в Json, Xml или плоском тексте файлы, или двоичные файлы)
  • уведомляет ваши действия (или любой другой контекст) о результате работы сети запрос, если они еще живы
  • не уведомляет о вашей деятельности результат, если они больше не живы
  • уведомляет о ваших действиях их поток пользовательского интерфейса
  • использует простую, но надежную модель обработки исключений
  • поддерживает несколько ContentServices для объединения различных веб-служб результаты
  • поддерживает многопоточность выполнения запросов
  • сильно набрал !
  • открытым исходным кодом ;)
  • и испытана

мы ищем обратную связь от сообщества.

модернизация может быть очень полезно здесь, он строит адаптер для вас из очень простой конфигурации, как:

модернизация превращает ваш API-интерфейс REST в Java-интерфейс.

public interface GitHubService {
  @GET("/users/{user}/repos")
  List<Repo> listRepos(@Path("user") String user);
}

класс RestAdapter создает реализацию интерфейса GitHubService.

RestAdapter restAdapter = new RestAdapter.Builder()
    .setEndpoint("https://api.github.com")
    .build();

GitHubService сервис = restAdapter.создать (GitHubService.класс); Каждый вызов сгенерированного GitHubService делает HTTP-запрос к удаленному web-сервер.

List<Repo> repos = service.listRepos("octocat");

для получения дополнительной информации посетите официальный сайт:http://square.github.io/retrofit/

Примечание: адаптер RestAdapter вы получаете от модернизации не является производным от BaseAdapter вы должны сделать обертку для него как-то такой вопрос почему мой ListView пуст после вызова setListAdapter внутри ListFragment?

Это немного поздно, но вот статья, которая объясняет первый шаблон из беседы:

http://www.codeproject.com/Articles/429997/Sample-Implementation-of-Virgil-Dobjanschis-Rest-p

Что мне нравится в первом шаблоне, так это то, что интерфейс к остальным методам является простым классом, а контент-провайдер остается просто предоставлять доступ к базе данных.

вы должны проверить исходный код для официального Google I / O 2010 app для начала, особенно SyncService и различные классы подпакет Ио.

хорошие новости, ребята. Реализация служебного помощника доступна здесь:https://github.com/MathiasSeguy-Android2EE/MythicServiceHelper Это проект с открытым исходным кодом (Apache 2). Я нахожусь в самом начале проекта. Я сделал проект, в котором я определил шаблон, но я еще не извлек код, чтобы сделать чистую librairy. Это будет сделано в ближайшее время.