在android中使用KSoap时出错?
我正在使用以下代码来调用webservice。我对在android中使用Ksoap非常陌生。我已经设法调用了1个webservice并解析了数据。但是,当我使用相同的代码(我更改了参数soapaction,命名空间…)来解析另一个webservice时,我得到了以下错误。我设置soapaction的参数,名称空间..都设置正确。 我创建了一个调用webservice的方法在android中使用KSoap时出错?,android,Android,我正在使用以下代码来调用webservice。我对在android中使用Ksoap非常陌生。我已经设法调用了1个webservice并解析了数据。但是,当我使用相同的代码(我更改了参数soapaction,命名空间…)来解析另一个webservice时,我得到了以下错误。我设置soapaction的参数,名称空间..都设置正确。 我创建了一个调用webservice的方法 public void showdetails() { String result = "";
public void showdetails()
{
String result = "";
SoapObject resultRequestSOAP = null;
SoapObject resultRequestSOAPbody =null;
SoapObject request = new SoapObject(NAMESPACE_Transaction, METHOD_NAME_Transaction);
request.addProperty("TransactionType","payment");
request.addProperty("MerchantId","543");
request.addProperty("amount","0.02");
request.addProperty("CCNo","4111111111111111");
request.addProperty("CCExpMonth","11");
request.addProperty("CCExpYear","22");
request.addProperty("Source","aa");
request.addProperty("profileId","788");
//request.addProperty("ClientIPAddress","120.138.99.2");
//request.addProperty("GEOCode","0.000000,0.000000");
//Some more fields that are not mandatory
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet = true;
envelope.setOutputSoapObject(request);
HttpTransportSE androidHttpTransport = new HttpTransportSE(URL_Transaction);
androidHttpTransport.debug = true;
try
{
androidHttpTransport.setXmlVersionTag("<?xml version=\"1.0\" encoding= \"UTF-8\"?>");
androidHttpTransport.call(SOAP_ACTION_Transaction, envelope);
String requestDumpString = androidHttpTransport.requestDump;
System.out.println("requestDump : " + requestDumpString);
resultRequestSOAP = (SoapObject) envelope.bodyIn;
// resultRequestSOAP = (SoapObject) envelope.getResponse(); // Output received
result = resultRequestSOAP.toString(); // Result string
System.out.println("OUTPUT : " + result);
if (envelope.bodyIn instanceof SoapFault)
{
String str= ((SoapFault) envelope.bodyIn).faultstring;
Log.i("TAG", str);
} else {
SoapObject resultsRequestSOAP = (SoapObject) envelope.bodyIn;
Log.d("WS", String.valueOf(resultsRequestSOAP));
}
} catch (Exception e) {
e.printStackTrace();
}
}
错误如下:
java.lang.ClassCastException: org.ksoap2.SoapFault cannot be cast to org.ksoap2.serialization.SoapObject
有人能帮我解决这个问题吗?我已经搜索了很多,但还没有解决。当我呼叫其他Web服务时,它会将信封返回给我。bodyIn。我编辑了你的代码,请像这样尝试
SoapObject request = new SoapObject(NAMESPACE_Transaction,
METHOD_NAME_Transaction); // set up request
request.addProperty("TransactionType","payment");
request.addProperty("MerchantId","543");
request.addProperty("amount","0.02");
request.addProperty("CCNo","4111111111111111");
request.addProperty("CCExpMonth","11");
request.addProperty("CCExpYear","22");
request.addProperty("Source","aa");
request.addProperty("profileId","788");
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
SoapEnvelope.VER11); // put all required data into a soap
// envelope
// envelope.dotNet = true; This is needed else gives error - 42,
// parameter is not recognised!!
envelope.dotNet = true;
envelope.setOutputSoapObject(request); // prepare request
AndroidHttpTransport httpTransport = new AndroidHttpTransport(
URL_Transaction);
httpTransport.call(SOAP_ACTION_Transaction, envelope);
SoapObject result = (SoapObject) envelope.getResponse();
System.out.println(result.toString());
SoapFault表示您的信封。bodyIn是错误的描述。我也知道,当我尝试执行resultRequestSOAP.toString时,错误就在那一行。我得到以下错误SoapFault-faultcode:'soap:Server'faultstring:'System.Web.Services.Protocols.SoapException:服务器无法处理请求。-->System.NullReferenceException:对象引用未设置为对象的实例。您能告诉我需要做什么更改吗?您能检查您的服务器需要什么类型的请求参数吗?您的服务器需要xml标记中的请求吗。嵌入在xml标记中的请求??检查您的请求应采用何种形式。可能这将帮助您解决此问题仍然是同一个错误@Amit.get错误。实际问题是我没有传递所有参数。其他字段必须在android代码中传递。虽然如果没有在浏览器中输入,它将调用Web服务。谢谢大家。我告诉过您检查请求参数,您也提出了同样的要求昨天的问题将其作为另一个问题发布
SoapObject request = new SoapObject(NAMESPACE_Transaction,
METHOD_NAME_Transaction); // set up request
request.addProperty("TransactionType","payment");
request.addProperty("MerchantId","543");
request.addProperty("amount","0.02");
request.addProperty("CCNo","4111111111111111");
request.addProperty("CCExpMonth","11");
request.addProperty("CCExpYear","22");
request.addProperty("Source","aa");
request.addProperty("profileId","788");
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
SoapEnvelope.VER11); // put all required data into a soap
// envelope
// envelope.dotNet = true; This is needed else gives error - 42,
// parameter is not recognised!!
envelope.dotNet = true;
envelope.setOutputSoapObject(request); // prepare request
AndroidHttpTransport httpTransport = new AndroidHttpTransport(
URL_Transaction);
httpTransport.call(SOAP_ACTION_Transaction, envelope);
SoapObject result = (SoapObject) envelope.getResponse();
System.out.println(result.toString());