Невозможно использовать асинхронные методы в Cordova 3.4. Onsuccess не вызывается после первого вызова метода плагина

Следующий код не работает должным образом:

public class TestPlugin extends CordovaPlugin {
   public static CallbackContext callbackContext;

   class TestRun implements Runnable {
      public void run() {
         try {
            Thread.sleep(10000);
         } catch (InterruptedException e) {}

         PluginResult result = new PluginResult(PluginResult.Status.OK, callbackContext.getCallbackId()); 
         result.setKeepCallback(false); 
         callbackContext.sendPluginResult(result); 
      }
   }

   @Override
   public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {
      this.callbackContext = callbackContext;
      TestRun tr = new TestRun();
      new Thread(tr).start();
      return true;
   }
}

JS-код:

var Test = {
   getBTPrinters: function(successCallback, errorCallback) {
      cordova.exec(successCallback, errorCallback, "TestPlugin", "test", []);
      setTimeout(function(){ cordova.exec(successCallback, errorCallback, "TestPlugin", "test", []); }, 30000);
   }
}

Обратный вызов onsuccess в моем коде Javascript не вызывается, когда я вызываю метод из TestPlugin в первый раз.
Когда я вызываю метод из этого плагина во второй раз, я получаю обратный вызов onsuccess из первый вызов.
После третьего вызова метода плагина я получаю обратный вызов onsuccess от второго вызова.
И так далее и тому подобное. Это ошибка Cordova/Phonegap?
Или я неправильно использую плагин?


person Volodymyr Bezuglyy    schedule 29.05.2014    source источник
comment
Нашел обходной путь, опубликовал его как ответ.   -  person jonperl    schedule 20.06.2014


Ответы (1)


Постоянный вызов exec заставит обрабатывать сообщения.

setInterval(function () {
    cordova.exec(null, null, '', '', [])
}, 200);
person jonperl    schedule 20.06.2014