Я пытаюсь запустить простой пример приложения для Android, использующего веб-службу. Следуя некоторым примерам в Интернете, я, наконец, сделал следующее:
private String getValueFromWS()
{
try
{
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
String weight = "3700";
String fromUnit = "Grams";
String toUnit = "Kilograms";
PropertyInfo weightProp =new PropertyInfo();
weightProp.setName("Weight");
weightProp.setValue(weight);
weightProp.setType(double.class);
request.addProperty(weightProp);
PropertyInfo fromProp =new PropertyInfo();
fromProp.setName("FromUnit");
fromProp.setValue(fromUnit);
fromProp.setType(String.class);
request.addProperty(fromProp);
PropertyInfo toProp =new PropertyInfo();
toProp.setName("ToUnit");
toProp.setValue(toUnit);
toProp.setType(String.class);
request.addProperty(toProp);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet = true;
envelope.setOutputSoapObject(request);
HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
androidHttpTransport.call(SOAP_ACTION, envelope);
SoapPrimitive response = (SoapPrimitive)envelope.getResponse();
return response.toString();
}
catch (Exception e)
{
return "Error: " + e.getMessage();
}
}
Я также добавил
<uses-permission android:name="android.permission.INTERNET"/>
в файле манифеста.
Я не знаю, почему это исключает
androidHttpTransport.call(SOAP_ACTION, envelope);
когда он работает с эмулятором. Я использую 2.5.8 версию kSoap, и эмулятор работает под управлением Android 4.1 (уровень 16).
Что я делаю неправильно?
Извините за поздний ответ, это исключение происходит потому, что вы выполняете сетевой вызов в основном потоке пользовательского интерфейса. Попробуйте выполнить вызов методом AsyncTask doInBackground(), чтобы разгрузить вызов из основного потока. Другой способ обойти это - изменить строгий режим, который, вероятно, включен по умолчанию на эмуляторе JellyBean (4.x). Вы также можете попробовать свой код в старой версии sdk/emulator (2.3.x), чтобы заставить его работать.
Это объясняет ошибку:
http://developer.android.com/reference/android/os/NetworkOnMainThreadException.html