0

当我尝试在下面的行之后在 android 中调用soap webservices

androidHttpTransport.call(SOAP_ACTION, envelope);

程序直接跳转到捕获程序应该被调用result = envelope.getResponse();,但我没有恢复响应任何人帮助的可能解决方案是什么?

try {
    System.out.println("Token ===sssTTTTTT " );

    SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);

    request.addProperty("encAppName", "dsakjsfj");
    request.addProperty("sessionInfo", "sadsadsdf");

    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
    envelope.dotNet = true;
    envelope.setOutputSoapObject(request);
    HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
    androidHttpTransport.call(SOAP_ACTION, envelope);

      result = envelope.getResponse();
       Toast.makeText(getBaseContext(), "  Result " + "\n" + result.toString(), Toast.LENGTH_SHORT).show();
       System.out.println("response === " + result.toString());

} catch (Exception e) {
    // txtprint.setText(e.getMessage());
}
4

3 回答 3

2

请试试这个我的工作代码。只需进行必要的更改。 如果你说它直接捕获块,这意味着它正在抛出一些异常。请尝试看看那是什么。使用 asynctask 作为后台线程(请求响应)

// put here your url's..
    private final String URL = "http://192.192.192.192/DemoService/Demo.asmx";
        private final String SOAP_ACTION = "http://tempuri.org/AndroidTestRequest";
        private final String METHOD_NAME = "AndroidTestRequest";


SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
        request.addProperty("User", "abcd@gmail.com");
        request.addProperty("Password", "test@123");
        SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
                SoapEnvelope.VER11);
        envelope.headerOut = new Element[1];
        envelope.headerOut[0] = buildAuthHeader();
        envelope.dotNet = true;
        envelope.setOutputSoapObject(request);

// you can add your properties here if you want to.
        /*
         * PropertyInfo cityProp = new PropertyInfo();
         * 
         * cityProp.setType(String.class); request.addProperty(cityProp);
         */

        Log.e("value of request", request.toString());
        Log.e("Value of envolope ", envelope.toString());

        HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);

        try {

            androidHttpTransport.call(SOAP_ACTION, envelope);

                    Log.i("myAppEnvelope", envelope.toString());

            SoapObject response = (SoapObject) envelope.getResponse();

            SoapObject object = (SoapObject) response.getProperty("value");


        } catch (Exception e) {
            e.printStackTrace();
        }
于 2013-06-27T06:37:32.720 回答
0

你的soap服务运行正常吗?如果,那么你必须在android中调用你的webservice thr asynctask你在 catch 块中遇到什么异常检查它会帮助你摆脱它。希望这对你有帮助。检查下面的代码调用这个类方法 thr asynctask

import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapPrimitive;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;


public class WebCommunication {

    public static String SOAP_ACTION = "";
    public static String METHOD_NAME = "";
    public static String NAMESPACE = "http://tempuri.org/";
    public static String URL = "http://192.168.1.108:8085/wsTrinfin/Service.asmx";//your webservice 

    public String CALLSOAP(String Data)
    {
        try {
            String Result="";

            METHOD_NAME = "ManageLicense";
            SOAP_ACTION = "http://tempuri.org/ManageLicense";

            SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
            request.addProperty("Data",Data);
            request.addProperty("ActivationType","Online");
            request.addProperty("ValidationParameter","TABLET");
            request.addProperty("SenderPhoneNumber","NA");

            SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
                    SoapEnvelope.VER11);
            envelope.dotNet = true;         
            envelope.setOutputSoapObject(request);
            HttpTransportSE aht = new HttpTransportSE(URL);
            SoapPrimitive results = null;
            try 
            {
                aht.call(SOAP_ACTION, envelope);
                results = (SoapPrimitive) envelope.getResponse();
            } 
            catch (Exception e) 
            {               
                //Log.Write("Unable to connect to webservice : " +e.toString());
                return "ERROR";
            }           
            Result= results.toString();         

            return Result;

        } catch (Exception e) {
            //Log.Write("Error Occured in :"+URL+e.toString(),Log._LogLevel.NORAML);
            return "ERROR";
        }
    }


}
于 2013-06-27T06:44:55.303 回答
0
public InputStream sendPOSTRequest(String strPostURL, String strParamToPost) 
{


    strPostURL = strPostURL.replace(" ", "%20");

    DefaultHttpClient defaultHttpClient = getHttpClient();
    HttpPost httpPost = new HttpPost(strPostURL);
    httpPost.addHeader("Content-Type", "text/xml; charset=utf-8");



    InputStream inputStream = null;

    try 
    {
        if(strParamToPost != null)
            httpPost.setEntity(new StringEntity(strParamToPost)); 

        LogUtils.info(LogUtils.SERVICE_LOG_TAG, "**Executing requst**");

        HttpResponse response = defaultHttpClient.execute(httpPost);

        LogUtils.info(LogUtils.SERVICE_LOG_TAG, "##Response received##");

        HttpEntity entity = response.getEntity();
        inputStream = entity.getContent();
    }
    catch (Exception e)
    {
        LogUtils.error("HttpHelper", "PostData Error :"+e.toString());
    }
    return inputStream;
}
于 2013-12-17T05:46:38.887 回答