簡體   English   中英

Web服務無法在Android應用程序上運行

[英]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為空。 有人知道此錯誤的原因嗎?

我無法檢測到出了什么問題,但是這里是一個使用kso​​ap的工作函數。 也許會有所幫助:

    /**
 * 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM