Как я могу отменить мыльный вызов в ksoap2?
Я использую этот код для вызова метода webservice с помощью ksoap2:
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
SoapEnvelope.VER11);
envelope.dotNet = true;
envelope.setOutputSoapObject(request);
HttpTransportSE androidHttpTransport = new HttpTransportSE(url,
TimeOutInSeconds * 1000);
try {
androidHttpTransport.call(soapAction, envelope);
} catch (Exception e) {
}
SoapObject so = (SoapObject) envelope.getResponse();
В некоторых ситуациях webserivce не отвечает на мой запрос немедленно, и приложение ожидает в очереди androidHttpTransport.call(soapAction, envelope);
и пользователь хочет отменить запрос. Как я могу позволить пользователю отменить call
метод?
1 ответ
Я надеюсь, что вы вызываете эту строку из фонового потока, а не из пользовательского интерфейса / основного потока. На самом деле на HC+ это должно произойти сбой по умолчанию из-за StrictMode.
Отмена сетевых вызовов во время их выполнения может быть сложной задачей. Возможно, вам придется сохранить ссылку на само соединение и вызвать shutdown()
метод из вашего основного потока. Однако нет никаких гарантий, что отмена будет вызвана немедленно. Это будет зависеть от реализации самого соединения.
Я предполагаю, что вы используете kSOAP, который я не уверен, если он предлагает cancel()
механизм.
Другой способ - дождаться завершения первого вызова, а затем выполнить другой сетевой вызов, чтобы отменить операцию на сервере. Это обеспечит синхронизацию вашего состояния.