Как получить сообщение от веб-сервиса с KSOAP2 и Android
Я попытался сделать простой учебник по ksoap2. Это ссылка
Моя проблема в том, что я получаю ответ, только если я использую SoapPrimitive и Ksoap...2.6.4.jar с Ksoap...2.4.jar и или "SoapObject response = (SoapObject)envelope.getResponse();" У меня есть исключение.
Как мне использовать 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 ответа
Решение
Ваш сервисный метод возвращает только целочисленное значение. В ksoap2, если ответ веб-службы имеет только одно значение (целое число, строка..), вы должны использовать
SoapPrimitive response = (SoapPrimitive) envelope.getResponse();
а также response.toString();
это результат, который вы хотите. Если ваш ответ имеет сложные типы (объекты), вы должны использовать
SoapObject response = (SoapObject) envelope.getResponse();
и разбери это.
Попробуй это
SoapObject resultObj = (SoapObject) envelope.bodyIn;
String result = (String)resultObj.getProperty(0);
Попробуй это
String result = envelope.getResponse().toString();
return result;