我正在编写一个应用程序,该应用程序使用ksoap2多次连接到https web服务,并且该应用程序的数据使用率很高。我认为它很高,因为每次调用WS-时我都要进行连接
有没有一种方法可以像singleton或共享HttpTransportSE对象一样为我的应用程序使用相同的连接?
我的代码示例:
public boolean Call1_Example(String Param1, String Param2)
{
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME24);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
SoapEnvelope.VER11);
request.addProperty("Param1", Param1);
request.addProperty("Param2", Param2);
envelope.dotNet = true;
envelope.setOutputSoapObject(request);
HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
Boolean resultado = false;
Object response;
try {
androidHttpTransport.call(Method1_SOAP_ACTION,
envelope);
response = envelope.getResponse();
resultado = Boolean.parseBoolean(response.toString());
} catch (Exception e) {
resultado = false;
}
return resultado;
}
我也遇到了同样的问题。我的WS总是返回我请求的整个对象。因此,我通过在每个setter中使用System.currentTimeMillis()来管理服务器为每个对象存储其上次更新的时间。
当您使用WS时,您将检索响应并保留上次更新的时间。对于WS的下一个请求,您将发送这个存储的时间。
因此,服务器将只向您发送差额。当然,这会导致对服务器代码的修改。
我不知道这是不是一个干净的解决方案,但它很好用。我在Wifi和3G中得到了大致相同的时间响应。
您也可以使用gzip来压缩消息。
HeaderProperty headerProperty=new HeaderProperty("Accept-Encoding", "gzip");
您可以在这里看到一个示例