[英]Web Service is not working on an Android application
我想將數據發送到WebService,但是它沒有返回有效的反饋,並且在String上顯示錯誤。 我正在使用KSOAP2。
已收集對象無法評估org.ksoap2.serialization.SoapObject.toString()
如果一切正常,它應該回答我“確定”,但是WebService返回XML(responseDump):
<?xml版本=“ 1.0”編碼=“ utf-8”?> <soap:Envelopexmlns:soap =“ http://schemas.xmlsoap.org/soap/envelope/” xmlns:xsi =“ http:// www .w3.org / 2001 / XMLSchema-instance“ xmlns:xsd =” http://www.w3.org/2001/XMLSchema“> <soap:Faultsoap:Server </ faultcode <faultstring> System.Web.Services.Protocols .SoapException: 服務器無法處理請求。 ---> System.InvalidOperationException: CommandText屬性尚未初始化。 在System.Data.OracleClient.OracleCommand.Execute(在System.Data.OracleClient.OracleCommand.get_StatementText()在System.Data.OracleClient.OracleCommand.get_StatementText()在System.Data.OracleClient.OracleCommand.Execute_OctStatementHandle在System.Data.OracleClient.OracleCommand.ExecuteNonQuery()在MettaWebService.BancoDados.executaComando(String query)在System.Data.OracleClient.OracleCommand.ExecuteNonQuery()在MobPrev_SAP.wsvmetta.EnvmD。 \\ Users \\ Deivite \\ AppData \\ Local \\ Temp \\ Compilacao \\ wsvMetta_Eng \\ wsvmetta.asmx.cs:line 65 --- 內部異常堆棧跟蹤的結尾 ---
這是發送和接收WebService的代碼:
public String transmitWS(String col_numero, String qtd_consumo, String idate_itime, String vlr_med, String cod_valor, String matric, String texto_obs, String observacao, String idProgramacao){ String HOST = ""; String NAMESPACE = ""; String URL = ""; //all right here String SOAP_ACTION = ""; String METHOD_NAME = ""; String resultWS = null; SoapObject requestTransmit = new SoapObject(NAMESPACE, METHOD_NAME); PropertyInfo transmitPI = new PropertyInfo(); transmitPI.setType(String.class); transmitPI.setName("Query"); transmitPI.setValue("update prev_programacao set col_numero = " + col_numero + ", status_ponto = 3, qtd_consumo =" + qtd_consumo + "," + " idate_itime = TO_DATE('"+ idate_itime +"','YYYY-MM-DD HH24:MI:SS'), vlr_med = " + vlr_med + ", cod_valor = " + cod_valor + ", matric = " + matric +", texto_obs = '" + texto_obs + "', observacao = '" + observacao + "' where id_programacao = "+idProgramacao+""); requestTransmit.addProperty(transmitPI); SoapSerializationEnvelope envelopeTransmit = new SoapSerializationEnvelope(SoapEnvelope.VER11); envelopeTransmit.dotNet = true; envelopeTransmit.setAddAdornments(false); envelopeTransmit.implicitTypes = false; envelopeTransmit.setOutputSoapObject(requestTransmit); HttpTransportSE androidHttpTransportTransmit = new HttpTransportSE(URL); //AndroidHttpTransport androidHttpTransport = new AndroidHttpTransport(URL); try { androidHttpTransportTransmit.debug = true; androidHttpTransportTransmit.call(SOAP_ACTION, envelopeTransmit); SoapObject responseTransmit = (SoapObject) envelopeTransmit.getResponse(); resultWS = androidHttpTransportTransmit.requestDump; resultWS = androidHttpTransportTransmit.responseDump; Log.i("t", "doInBackground"); } catch (Exception e) { e.printStackTrace(); } return resultWS; }
最后,resultWS為空。 有人知道此錯誤的原因嗎?
我無法檢測到出了什么問題,但是這里是一個使用ksoap的工作函數。 也許會有所幫助:
/**
* Calls the stored proc on the server to return a dataset/SoapObject. This will always run the ProcReader method on the web server.
*
* @param storedProc The Stored Proc to call
* @param params The parameter(s) for the stored proc (pipe seperated for multiple parameters)
* @return The SoapObject returned by the Stored Proc call
* @throws Exception
*/
public static SoapObject callProcServiceForObject(String serviceMethod, String storedProc, String params) throws Exception {
String NAMESPACE = "http://" + GlobalVars.serviceIP + "/";
String METHOD_NAME = getMethodName(serviceMethod);
String SOAP_ACTION = NAMESPACE + METHOD_NAME;
String URL = "http://" + GlobalVars.serviceIP + "/ATService.asmx";
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
if (GlobalVars.encryptedService) {
request.addProperty("ePassword", CryptUtil.encryptString(GlobalVars.deviceSerialNumber));
request.addProperty("eData", CryptUtil.encryptString(GlobalVars.serverDB));
request.addProperty("eSP_Name", CryptUtil.encryptString(storedProc));
request.addProperty("eParam", CryptUtil.encryptString(params));
} else {
request.addProperty("sPassword", GlobalVars.deviceSerialNumber);
request.addProperty("sData", GlobalVars.serverDB);
request.addProperty("sSP_Name", storedProc);
request.addProperty("sParam", params);
}
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
// Enable the below property if consuming .Net service
envelope.dotNet = true;
envelope.setOutputSoapObject(request);
HttpTransportSE androidHttpTransport = new HttpTransportSE(URL, timeout);
//count up the network traffic
numberOfBytesTransmitted = numberOfBytesTransmitted + StringToBytes(request.toString());
SoapObject returnable = null;
try {
androidHttpTransport.call(SOAP_ACTION, envelope);
returnable = (SoapObject)envelope.getResponse();
} catch (Exception e) {
e.printStackTrace();
throw new Exception("Msg:" + e.getMessage() + "; SP:" + storedProc + "; Params: " + params + "; Method:" + METHOD_NAME);
}
numberOfBytesTransmitted = numberOfBytesTransmitted + StringToBytes(returnable.toString());
return returnable;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.