2013-07-18 5 views
0

Я пишу приложение, которое многократно подключается к веб-службе https, используя ksoap2, и использование данных приложения велико. Я думаю, что это высоко, потому что я выполняю соединение каждый раз, когда я вызываю WS.Ksoap2 с https использует много переключателей Как оптимизировать соединения?

Есть ли способ использовать одно и то же соединение для моего приложения, как одноэлементный или использовать объект 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; 
} 
+0

areyou используя AsyncTask или нить для связанных с сетевой операции? – Raghunandan

+0

Да, вызов всегда в асинтете. Код работает нормально, но я думаю, что приложение использует много переключателей. – David

+0

Это ошибка в моем коде, который потребляет данные, а не ksoap2 (я делал HTTP-сообщение каждый раз, когда приложение запускается). Спасибо за поддержку !! – David

ответ

0

я столкнулся с той же проблемой. My WS всегда возвращал весь объект, который я запросил. Таким образом, я управляю тем, что сервер сохраняет для каждого объекта свое последнее обновленное время, используя System.currentTimeMillis() в каждом сеттер.

Когда вы потребляете свой WS, вы получаете ответ и сохраняете последнее обновленное время. Для следующего запроса на WS вы отправите это время хранения.

Таким образом, сервер отправит вам только разницу. Конечно, это приводит к изменению кода вашего сервера.

Я не знаю, если это чистое решение, но оно отлично работает. У меня примерно одинаковый ответ в Wifi и 3G.

Вы также можете использовать gzip для сжатия сообщения.

HeaderProperty headerProperty=new HeaderProperty("Accept-Encoding", "gzip"); 

Вы можете увидеть образец here

+0

Это хорошая оценка aproach, но моя проблема была ошибкой с запросом http каждый раз, когда я запускал приложение. – David