Статьи

Вызов веб-сервисов из Android

Это постоянный блог о начале работы с Android . В предыдущем блоге я представил обзор архитектуры приложения для Android, затем настроил среду разработки для Android и создал и запустил простое приложение.

В этом блоге я опишу, как вызывать веб-сервисы (сервисы на основе мыла) через Android. В моем следующем блоге я расскажу о том, как вызывать службы на основе REST. Чтобы опробовать учебник , вам нужно настроить среду разработки для Android, как упоминалось в моем предыдущем блоге .

Есть два способа вызова веб-сервисов

  • Необработанные API: используйте синтаксический анализатор HttpClient и XML, чтобы вручную создать запрос мыла и проанализировать ответ мыла.
  • Использование клиентской библиотеки мыла: подобно библиотеке KSOAP, которая выполняет низкоуровневую работу для анализа и обработки сообщений мыла. Для Android существует библиотека, доступная по адресу http://code.google.com/p/ksoap2-android/ . Приятно видеть некоторую активную разработку для KSOAP 2, я вспомнил, что написал первую статью о KSOAP 2 еще в 2003 году ( http://naveenbalani.com/index.php/2010/05/deliver-web-services-to- мобильные телефоны / ) и приятно видеть это снова в разработке для Android.

Я бы начал разработку с более позднего подхода, но я планирую использовать RAW API в следующем посте —

Загрузите библиотеку KSOAP2, перейдите по адресу http://code.google.com/p/ksoap2-android/ , нажмите на ссылку загрузки в меню и загрузите артефакт последней версии — http://code.google.com/p /ksoap2-android/source/browse/m2-repo/com/google/code/ksoap2-android/ksoap2-android-assembly/2.5.2/ksoap2-android-assembly-2.5.2-jar-with-dependencies.jar , На странице артефакта выпуска нажмите «Просмотр необработанного файла» и выберите «Сохранить ссылку как» и загрузите файл JAR, который имеет все необходимые зависимости.

Затем мы создадим пример проекта Android, который будет вызывать веб-сервис .NET . Я решил разместить на своем веб-сайте простой веб-сервис .NET, чтобы вам всем было легче опробовать этот образец. Веб-сервис доступен по адресу http://naveenbalani.com/WassupAndroid.asmx.

Это простая служба .NET с одной операцией под названием todayMessage (), которая отображает «Wassup Android из приложения .NET» в качестве вывода.

Создать андриоидный проект. Начать затмение.

  • Выберите «Файл»> «Создать»> «Проект».
  • Выберите Android> Android Project, нажмите «Далее».
  • Введите следующую информацию для проекта —

Название проекта — AndroidClientService

Цель сборки — Android 2.3

Имя приложения — WasuppTodaysMessage

Имя пакета — org.android.websevice.client.samples

Создать активность — AndroidClientService

Мин версия SDK — 9

  • Нажмите Готово

Это создаст проект под названием AndroidClientService в вашей рабочей области.

Затем добавьте в проект зависимость ksoap2-andriod. Выберите AndroidClientService, нажмите «Свойства», выберите путь сборки Java, нажмите «Библиотеки», выберите «Добавить внешние файлы Jar» и добавьте библиотеку ksoap2 (ksoap2-android-assembly-2.5.2-jar-with-dependencies.jar) и нажмите кнопку «ОК».

Затем откройте класс WasuppServiceClientAndroid и замените метод onCreate следующим методом onCreate (), как показано в листинге ниже. Ниже приведен полный список кодов.

Этот проект будет вызывать веб-сервис и отображать на устройстве «» при выполнении приложения . Чтобы построить проект, выберите Проект -> Очистить

package android.websevice.client.samples; import org.ksoap2.SoapEnvelope;import org.ksoap2.serialization.SoapObject;import org.ksoap2.serialization.SoapSerializationEnvelope;import org.ksoap2.transport.HttpTransportSE; import android.app.Activity;import android.os.Bundle;import android.widget.TextView; public class AndroidClientService extends Activity { private static final String SOAP_ACTION = "http://www.naveenbalani.com/webservices/WassupAndroidService/todaysMessage"; private static final String OPERATION_NAME = "todaysMessage"; private static final String WSDL_TARGET_NAMESPACE = "http://www.naveenbalani.com/webservices/WassupAndroidService/"; private static final String SOAP_ADDRESS = "http://naveenbalani.com/WassupAndroid.asmx"; @Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState); TextView textView = new TextView(this); setContentView(textView); SoapObject request = new SoapObject(WSDL_TARGET_NAMESPACE,OPERATION_NAME); SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);envelope.dotNet = true; envelope.setOutputSoapObject(request); HttpTransportSE httpTransport = new HttpTransportSE(SOAP_ADDRESS); try { httpTransport.call(SOAP_ACTION, envelope); Object response = envelope.getResponse(); textView.setText(response.toString()); } catch (Exception exception) { textView.setText(exception.toString()); } }}

 

Чтобы запустить Android-приложение AndroidClientService, щелкните его и выберите «Запуск от имени»> «Android-приложение».

На консоли eclipse вы увидите следующее похожее сообщение —

[AndroidClientService] Запуск активности android.websevice.client.samples.AndroidClientService

[AndroidClientService] Автоматический целевой режим: запуск нового эмулятора с совместимым AVD ‘AVD’

[AndroidClientService] Запуск нового эмулятора с виртуальным устройством «AVD»

[AndroidClientService] Ожидание запуска HOME (‘android.process.acore’)…

Вы должны увидеть, как запускается Android AVD. После вышеприведенного сообщения, в первый раз требуется 2-3 минуты, чтобы открыть домашнюю страницу Android в эмуляторе.

После запуска устройства на консоли должно появиться следующее сообщение.

[AndroidClientService] Загрузка AndroidClientService.apk на устройство «эмулятор-5554»

[AndroidClientService] Установка AndroidClientService.apk…

[AndroidClientService] Удачи!

[AndroidClientService] Начало активности android.websevice.client.samples.AndroidClientService на эмуляторе устройства-5554

Если приложение не отображается в эмуляторе, щелкните пункт «Меню» в эмуляторе, и вы увидите приложение Android WasuppTodayMessage и сообщение, отображаемое.

Проблемы, возникающие при вызове приложения веб-служб из эмулятора Android

  • Неизвестное исключение хоста —

Если вы получаете следующее исключение — «java.net.UnKnownHostException: naveenbalani.com», то вам нужно добавить необходимый сервер доменных имен, который эмулятор будет использовать для разрешения домена.

Список сетевых ограничений для эмулятора доступен по адресу — http://developer.android.com/guide/developing/tools/emulator.html#networkinglimitations

Согласно документации — «

«При запуске эмулятор считывает список DNS-серверов, которые в данный момент используется вашей системой. Затем он сохраняет IP-адреса до четырех серверов в этом
списке и устанавливает им псевдонимы по эмулируемым адресам 10.0.2.3, 10.0.2.4, 10.0.2.5 и 10.0.2.6 по мере необходимости.

В Linux и OS X эмулятор получает адреса DNS-сервера, анализируя файл /etc/resolv.conf. В Windows эмулятор получает адреса, вызывая API GetNetworkParams (). Обратите внимание, что это обычно означает, что эмулятор игнорирует содержимое вашего «файла hosts»

Теперь, чтобы добавить сервер доменных имен, нажмите Запустить конфигурации и выберите AndroidClientService и добавьте следующее

-dns-сервер ns15.unitechost.in

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

  • Безопасность

Если при подключении к Интернету у вас возникает проблема с разрешением, вам нужно добавить следующую строку в <использование-права android: name = ”android.permission.INTERNET»> </ использование-разрешения>, чтобы приложение могло получить доступ к Интернету.

Вот полный список AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="android.websevice.client.samples" android:versionCode="1" android:versionName="1.0"> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".AndroidClientService" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>  </application> <uses-sdk android:minSdkVersion="9" /><uses-permission android:name="android.permission.INTERNET"></uses-permission></manifest>

 

 

С http://naveenbalani.com/index.php/2011/01/invoke-webservices-from-android/