Consuming a SOAP webservice without ksoap2 in Andr

2019-02-26 02:02发布

In my Android application, i'm using ksoap2 library for consuming a soap ( & .net) webservice. It works correctly but it's very slow (for parsing, controls, loops and Base64ToBinary processes). I want to parse it more fast. Is it possible to parse it without using ksoap2? Any ideas? Thanks for your recommendations.

5条回答
爷、活的狠高调
2楼-- · 2019-02-26 02:10

USE Restful webservice client

How to call Restful web service in android

Also see the Google I/O video on restful clients http://www.youtube.com/watch?feature=player_embedded&v=xHXn3Kg2IQE

查看更多
Rolldiameter
3楼-- · 2019-02-26 02:19

You can use DefaultHttpClient to do this. In here (How to call SOAP web service with Android) you can find a code snippet.

查看更多
Explosion°爆炸
4楼-- · 2019-02-26 02:22

Android doesn't provide built-in support to SOAP . You must provide out of the box support using KSOAP2 or similar libraries

For other ideas, check this link

How to call a SOAP web service on Android

Hope it helps

查看更多
兄弟一词,经得起流年.
5楼-- · 2019-02-26 02:33

What do you mean slow? It does a http request and then parses the response. You have to do this in an async task. Memory usage will depend on the response you get. Maybe you are requesting way too much. See the wiki on how to debug!

查看更多
我想做一个坏孩纸
6楼-- · 2019-02-26 02:33

I have another problem with KSoap2. Unfortunately, ksoap2 library is not working with my webservices. So at last, I have done with default http post.

I hope this will help for someone in future.

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;
    }
查看更多
登录 后发表回答