Проблема с веб-сервисом Android kSOAP - PullRequest
0 голосов
/ 08 июля 2011

Я пытаюсь вызвать общедоступный веб-сервис (w3schools.com/webservices/tempconvert.asmx) через kSOAP (скачал и включил «.jar» непосредственно из Google).

Вот мой код:

// declarations

private static final String NAMESPACE = "http://tempuri.org/" ;
private static final String METHOD_NAME = "CelsiusToFahrenheit";
private static final String SOAP_ACTION = "http://tempuri.org/CelsiusToFahrenheit";
private static final String URL = "http://216.128.29.26/webservices/tempconvert.asmx";

// code

try
{
   SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
   SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
   HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);

   request.addProperty("Celsius", "32");
   envelope.setOutputSoapObject(request);
   androidHttpTransport.call(SOAP_ACTION, envelope);

   Object result = envelope.getResponse();
}
catch(Exception e)
{
   e.printStackTrace();
}

Кроме того, "AndroidManifest.xml" включает в себя разрешение на доступ к Интернету:

<uses-permission android:name="android.permission.INTERNET"></uses-permission>

Кроме того, мой AVD может получить доступ к Интернету (пробовал через приложение Browser).

Может кто-нибудь помочь мне?Я пытаюсь сделать это около 6 часов, и все еще не могу.

Спасибо!

Ответы [ 5 ]

5 голосов
/ 21 июля 2011

Проблема в том, что вы выполняете сетевой вызов в главном потоке, а на уровне API 12 это больше не разрешено.Вам просто нужно переместить вызов ksoap2 в AsyncTask или около того.Кстати, эта проблема может возникнуть при любом доступе к сети.Это принудительная проверка в строгом режиме.

1 голос
/ 12 июля 2011

похоже, что вы делаете то же самое руководство, что и я. http://www.vimeo.com/9633556

кажется, что вы пропали без вести envelope.dotNet = true;

0 голосов
/ 29 февраля 2012
package com.soap;

    import org.ksoap2.SoapEnvelope;
    import org.ksoap2.serialization.SoapObject;
    import org.ksoap2.serialization.SoapPrimitive;
    import org.ksoap2.serialization.SoapSerializationEnvelope;
    import org.ksoap2.transport.AndroidHttpTransport;

    import android.app.Activity;
    import android.os.Bundle;
    import android.util.Log;
    import android.widget.TextView;
    public class SoapsActivity extends Activity {
    /** Called when the activity is first created. */
    private static final String SOAP_ACTION = "http://tempuri.org/CelsiusToFahrenheit";
    private static final String METHOD_NAME = "CelsiusToFahrenheit";
    private static final String NAMESPACE = "http://tempuri.org/"; 
    private static final String URL = "http://www.w3schools.com/webservices/tempconvert.asmx";
    TextView tv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        tv = (TextView) findViewById(R.id.tvsoap);
        SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
        request.addProperty("Celsius", "32");
        SoapSerializationEnvelope evenlop = new SoapSerializationEnvelope(
                SoapEnvelope.VER11);
        evenlop.dotNet = true;
        evenlop.setOutputSoapObject(request);
        AndroidHttpTransport aht = new AndroidHttpTransport(URL);
        try {
            aht.call(SOAP_ACTION, evenlop);
            SoapPrimitive resultString = (SoapPrimitive) evenlop.getResponse();
            tv.setText("ststus :" + resultString.toString());
        } catch (Exception e) {
            System.out.println(e.toString());
        }

    }

}
0 голосов
/ 13 июля 2011

Я только что попробовал свой собственный код (который отличается только в веб-сервисе тем, что он пытается использовать) с версией API 10 и ksoap2, и он все еще работает, как и ожидалось.

            private static final String SOAP_ACTION = "http://tempuri.org/CelsiusToFahrenheit";
            private static final String METHOD_NAME = "CelsiusToFahrenheit";
            private static final String NAMESPACE = "http://tempuri.org/";
            private static final String URL = "http://www.w3schools.com/webservices/tempconvert.asmx";
            System.out.println("--==Creating SOAP object==--");
            SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
            request.addProperty("Celsius", "32");
            System.out.println("--==Finished Creating SOAP object==--");

            System.out.println("--==Creating SOAP envelope==--");
            SoapSerializationEnvelope soapEnvelope = new SoapSerializationEnvelope(
                    SoapEnvelope.VER11);
            soapEnvelope.dotNet = true;
            soapEnvelope.setOutputSoapObject(request);
            System.out.println("--==Finished Creating SOAP envelope==--");

            HttpTransportSE aht = new HttpTransportSE(URL);
            // aht.debug = true;

            try {
                System.out.println("--==Creating SOAP call==--");
                aht.call(SOAP_ACTION, soapEnvelope);
                System.out.println("test");

                SoapPrimitive response = (SoapPrimitive) soapEnvelope.getResponse();
                System.out.println(response.toString());
                tableData.addView(resultSoap);
                System.out.println("--==Finished Creating SOAP call==--");
            } catch (Exception e) {
                e.printStackTrace();
            }
            if (aht.debug == true) {
                System.out.println(aht.responseDump);
            }
0 голосов
/ 12 июля 2011

Не совсем. У меня было это раньше (пробовал как минимум 5 разных подходов). Это не помогло. Это была версия API. У меня было 12. Это не сработало. Я где-то нашел, что kSOAP работает только с 8 и ниже. Пойди разберись:)

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

...