4

Сценарий следующий:ContentProvider с WebService в качестве источника

  • У меня есть андроид приложение, которое в основном состоит из MapView.
  • Это приложение запрашивает различные веб-службы, такие как Foursquare или Wikipedia, чтобы получить список мест и нанести их на карту.

вопрос,

  • Кто-нибудь знает, как создать контент-провайдера, где источником данных является веб-сервис (например, упомянутых выше), а не БД? Было бы здорово, если бы вы могли указать мне в правильном направлении.

Спасибо!

+0

Я просто хочу сделать то же самое, но вместо прямого запроса на веб-службу это будет поставщик контента, который это сделает. Таким образом, я могу использовать внешние приложения для подключения к различным веб-службам. – androidtje

+0

Дополнительные параметры ContentProviders для веб-сервисов указаны на http://stackoverflow.com/questions/4097686/restful-frameworks-for-android-ios –

ответ

1

Я искал то же, что и вы, и я прошел через DataDroid http://www.datadroidlib.com/. Я думаю, что это проще в использовании, и это простой способ обработки REST, если ваш веб-сервис ориентирован на REST.

Edit:

DataDroid теперь отмечен как устаревший. Они движутся к Robospice см https://github.com/stephanenicolas/robospice

1

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

Примите во внимание следующий ответ, который может считаться довольно старомодным «ручным» методом.

Вы можете создать контент-провайдера, который запросы веб-сервис, и преобразует полученный результат в курсор.

Для запроса веб-службы вы можете использовать HttpClient и HttpGet. Вы можете найти учебник по MyKong о том, как это сделать. Для этого есть также newer alternatives.

В процессе анализа результатов поиска вы получаете от веб-сервиса, вы можете создать свой собственный курсор с MatrixCursor класса путем добавления строк с addRow() для каждого отдельного результата.

Если вы должны были сделать это, убедитесь, что вы всегда называют свой контент-провайдера через фоновый поток (т.е. с использованием CursorLoader, AsyncTask или другую форму резьбы), в противном случае работа сети будет в конечном итоге на главном интерфейсе нить.