Вопрос по ksoap2, android, web-services – Как получить сообщение от веб-сервиса с KSOAP2 и Android

0

Я попытался сделать простой учебник по ksoap2. Этоссылка на сайт

Моя проблема в том, что я получаю ответ, только если я использую SoapPrimitive и Ksoap ... 2.6.4.jar с Ksoap ... 2.4.jar и или & quot; SoapObject response = (SoapObject) envelope.getResponse (); & quot; У меня есть исключение.

Как я должен использовать SoapObject?

Это мой код:

public class WS_Auth_ComplexObjectsActivity extends Activity {
    /** Called when the activity is first created. */

    String NAMESPACE = "http://WS.androidroleplay.fk4.de.hs_bremen.de";
    String METHOD_NAME = "GetSumOfTwoInts";
    String SOAP_ACTION = "http://WS.androidroleplay.fk4.de.hs_bremen.de/GetSumOfTwoInts";
    String URL = "http://192.168.178.28:8080/WebProject_DB16/services/HelloWorldWS?wsdl";

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        SoapObject Request = new SoapObject(NAMESPACE, METHOD_NAME);

        PropertyInfo pi = new PropertyInfo();
        pi.setName("Operand1");
        pi.setValue(2);
        pi.setType(int.class);
        Request.addProperty(pi);

        PropertyInfo pi2 = new PropertyInfo();
        pi2.setName("Operand2");
        pi2.setValue(5);
        pi2.setType(int.class);
        Request.addProperty(pi2);

        SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);

        envelope.setOutputSoapObject(Request);

//        envelope.addMapping(NAMESPACE, "Integer",);
        HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);

        try
        {
             // Hier folgt die Authentifikation mit dem User Admin und Passwort Admin
            List<HeaderProperty> headerList = new ArrayList<HeaderProperty>();
            headerList.add(new HeaderProperty("Authorization", "Basic " + org.kobjects.base64.Base64.encode("tomcat:tomcat".getBytes()))); // "username:password"

            androidHttpTransport.call(SOAP_ACTION, envelope, headerList);
            androidHttpTransport.debug=true;

            SoapObject response = (SoapObject)envelope.getResponse();
            String result =  response.getAttributeAsString(0);

            TextView tv = (TextView)findViewById(R.id.TextView);
            tv.setText("Text: " + result); //"CategoryId: " +C.getCategoryId() + " Name: " + C.getName() + " Description: " + C.getDescription()
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
    }
}

И это мой веб-сервис:

public class HelloWorldWS
{   

    public int GetSumOfTwoInts(int Operand1, int Operand2 )
    {
        System.out.println(Operand1+ " + "+ Operand2 +" = "+ (Operand1 + Operand2));

       return Operand1 + Operand2;
    }


}

Ваш Ответ

3   ответа
0

Попробуй это

SoapObject resultObj = (SoapObject) envelope.bodyIn;
String result = (String)resultObj.getProperty(0);
KvmSerializable ks = (KvmSerializable)envelope.bodyIn; String[] temp=new String[ks.getPropertyCount()]; for(int i=0;i<ks.getPropertyCount();i++) { temp[i]= ks.getProperty(i).toString(); }
Спасибо :-) Florian E.
хорошо, но что мне делать, если я хочу восстановить массив? Florian E.
затем используйтеSoapPrimitive response = (SoapPrimitive) envelope.getResponse(); String str=response.toString();
Извините, это не работает, но это решение мне нужно. Это исключение:java.lang.ClassCastException: org.ksoap2.serialization.SoapPrimitive, Что я мог сделать? Florian E.
0

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

SoapPrimitive response = (SoapPrimitive) envelope.getResponse();

а такжеresponse.toString(); это результат, который вы хотите. Если ваш ответ имеет сложные типы (объекты), вы должны использовать

SoapObject response = (SoapObject) envelope.getResponse();

и разобрать это.

0

попробуй это

String result = envelope.getResponse().toString();
return result;

Похожие вопросы