在Android中使用没有ksoap2的SOAP Web服务

时间:2011-07-15 11:25:54

标签: android xml parsing soap ksoap2

在我的Android应用程序中,我使用kso​​ap2库来使用soap(& .net)webservice。它工作正常,但它非常慢(用于解析,控制,循环和Base64ToBinary进程)。我想更快地解析它。是否可以在不使用kso​​ap2的情况下解析它?有任何想法吗? 感谢您的推荐。

5 个答案:

答案 0 :(得分:2)

您可以使用DefaultHttpClient执行此操作。 在这里(How to call SOAP web service with Android),您可以找到代码段。

答案 1 :(得分:0)

Android不提供对SOAP的内置支持。您必须使用KSOAP2或类似的库提供开箱即用的支持

有关其他想法,请查看此链接

How to call a SOAP web service on Android

希望有所帮助

答案 2 :(得分:0)

你什么意思慢?它执行http请求,然后解析响应。您必须在异步任务中执行此操作。内存使用情况取决于您获得的响应。也许你的要求太多了。请参阅wiki了解如何调试!

答案 3 :(得分:0)

使用Restful webservice客户端

How to call Restful web service in android

另请参阅Restful客户端上的Google I / O视频 http://www.youtube.com/watch?feature=player_embedded&v=xHXn3Kg2IQE

答案 4 :(得分:0)

我还有KSoap2的另一个问题。不幸的是,ksoap2库不能与我的webservices一起使用。所以最后,我已经完成了默认的http post。

我希望这对未来的人有所帮助。

private String makeHttpRequest(){
        try{
            String request = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><SOAP-ENV:Envelope xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:ns1=\"http://tempuri.org/\">"
                    +"<SOAP-ENV:Body>"
                    + "<ns1:Connect>"
                    + "<ns1:lstr_Login>xxxxx</ns1:lstr_Login>"
                    +"</ns1:Connect>"
                    +"</SOAP-ENV:Body>"
                    +"</SOAP-ENV:Envelope>";

            String soapAction = "http://tempuri.org/Connect"; //this would be your soapAction from wsdl

            StringEntity se = new StringEntity(request, HTTP.UTF_8);
            DefaultHttpClient client = new DefaultHttpClient();
            HttpPost httpPost = new HttpPost(new URI("http://xxxxxxxx.com/Storefront.asmx"));

            httpPost.addHeader("Content-Type", "text/xml; charset=utf-8");
            httpPost.addHeader("SOAPAction", soapAction);

            httpPost.setEntity(se);
            HttpResponse response = client.execute(httpPost);
            int responseStatusCode = response.getStatusLine().getStatusCode();
            Log.d(TAG, "HTTP Status code:"+responseStatusCode);
            if(responseStatusCode>=200 && responseStatusCode<300){
                //we got the success response from server. Now retrieve the value and go for usage.
                String responseStr = EntityUtils.toString(response.getEntity());
                //use this responseStr to parse with pullparsers or any
                Log.d("Response", "Response:: "+ responseStr);
                return responseStr;
            }
        }catch(Exception e){
            //Write the proper catch blocks for exceptions
            Log.e("Response Exception" , e.getMessage()+"",e);
        }
        return null;
    }