在我的Android应用程序中,我使用ksoap2库来使用soap(& .net)webservice。它工作正常,但它非常慢(用于解析,控制,循环和Base64ToBinary进程)。我想更快地解析它。是否可以在不使用ksoap2的情况下解析它?有任何想法吗? 感谢您的推荐。
答案 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;
}