连接到外部Web服务无法在Android上响应

时间:2015-02-23 16:32:47

标签: android web-services thread-synchronization

我正在尝试从Android应用程序连接到外部Web服务,但目前它在XML响应上崩溃,如果调用结构不正确或任何响应代码崩溃,请帮助我注意。这是我的代码:

public class sri extends AsyncTask<String, String, String>
{
public final static String URL = "http://qa-suia.ambiente.gob.ec:8092/suiawebservices/SuiaServices?wsdl";
public static final String NAMESPACE = "http://client.ambiente.gob.ec/";
public static final String SOAP_ACTION_PREFIX = "/";
private static final String METHOD = "getRuc";

private String resp;
SoapSerializationEnvelope sobre = new SoapSerializationEnvelope(SoapEnvelope.VER11);
protected String doInBackground(String... param)
{

    SoapObject request = new SoapObject(NAMESPACE,METHOD);
    //String JsonString=Serializa();
    request.addProperty("user","99999999");
    request.addProperty("pass","xxxxxxxxxxxx");
    request.addProperty("rucNumber","99999999999");

    //sobre.dotNet=true;
    sobre.setOutputSoapObject(request);
    try
    {
        HttpTransportSE transporte=new HttpTransportSE(URL);
        transporte.call(NAMESPACE+METHOD, sobre);
    } catch (Exception e)
    {
        String msn="error";
        return msn;
    }

    try {
        if (sobre != null) {
            SoapPrimitive response = (SoapPrimitive)sobre.getResponse();
            resp=response.toString();

        }
        else
        {

        }
    } catch (Exception e) {
        e.printStackTrace();
        resp = e.getMessage();
    }

    return resp;
}

protected void onProgressUpdate(Integer... values)
{         
}

public void onPreExecute()
{  
}


public void onPostExecute(String result)
{

    String resultado=result;


}

1 个答案:

答案 0 :(得分:0)

这是我正在调用.Net服务的工作代码(看起来你没有把你的请求放到信封里):

    private static SoapPrimitive callProcServiceForScalar(String serviceMethod, String storedProc, String params) throws Exception {
    String NAMESPACE = "http://" + YourIPAddress + "/";
    String METHOD_NAME = getMethodName(serviceMethod);
    String SOAP_ACTION = NAMESPACE + METHOD_NAME;
    String URL = "http://" + YourIP + "/YourService.asmx";
    SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);


    request.addProperty("sPassword", sYourPassword);
    request.addProperty("sData", sServerDB);
    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);


    numberOfBytesTransmitted = numberOfBytesTransmitted + StringToBytes(request.toString());


    HttpTransportSE androidHttpTransport = new HttpTransportSE(URL, timeout);

    SoapPrimitive returnable = null;
    try {
        androidHttpTransport.call(SOAP_ACTION, envelope);
        returnable = (SoapPrimitive)envelope.getResponse();
    } catch (Exception e) {
        e.printStackTrace();
        throw new Exception("Msg:" + e.getMessage() + "; SP:" + storedProc + "; Params: " + params + "; Method:" + METHOD_NAME);
    }

    return returnable;
}