Как я могу отменить мыльный вызов в 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() механизм.

Другой способ - дождаться завершения первого вызова, а затем выполнить другой сетевой вызов, чтобы отменить операцию на сервере. Это обеспечит синхронизацию вашего состояния.

Другие вопросы по тегам