Потребляйте WS из Android с эмулятором

1

Я пытаюсь запустить простой пример приложения для 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).

Что я делаю неправильно?

  • 0
    Пожалуйста, предоставьте исключение, которое вы видите. Также взгляните на эту ссылку stackoverflow.com/questions/9355707/…, так как она может быть вам полезна.
  • 0
    Это исключение NetWorkOnMainThreadException. Подробное сообщение = ноль. Не много информации, извините.
Теги:
android-emulator
web-services
ksoap2

1 ответ

2
Лучший ответ

Извините за поздний ответ, это исключение происходит потому, что вы выполняете сетевой вызов в основном потоке пользовательского интерфейса. Попробуйте выполнить вызов методом AsyncTask doInBackground(), чтобы разгрузить вызов из основного потока. Другой способ обойти это - изменить строгий режим, который, вероятно, включен по умолчанию на эмуляторе JellyBean (4.x). Вы также можете попробовать свой код в старой версии sdk/emulator (2.3.x), чтобы заставить его работать.

Это объясняет ошибку:

http://developer.android.com/reference/android/os/NetworkOnMainThreadException.html

  • 0
    Отлично. Теперь это работает. Кроме того, рекомендуется не использовать основной поток для вызовов WS. Делает взаимодействие с пользователем более понятным. Большое спасибо.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню