如何在Java中多次执行Cordova回调(Android)

如果你有一个循环或某个东西需要多次执行回调(例如, 在Java上正在执行的下载进度), 你可能会注意到, 在执行一次之后, 回调不再起作用。

这个问题是众所周知的:

callbacks.success("somejson"); // Succesfully executed in javascript

// something else 
Boolean something = true;

// bla bla bla code !

callbacks.success("anotherJSON!!!"); // This will be never executed!

由于某种原因, 回调不会被执行, 因为你没有保留该回调(该函数已准备就绪, 不再需要执行)。

你可以使用以下代码轻松解决此问题:

PluginResult resultA = new PluginResult(PluginResult.Status.OK, "myfirstJSONResponse");
resultA.setKeepCallback(true);
callbacks.sendPluginResult(resultA);

// Some more code

Boolean something = true;

// bla bla bla code


PluginResult resultB = new PluginResult(PluginResult.Status.OK, "secondJSONResponse");
resultB.setKeepCallback(true);
callbacks.sendPluginResult(resultB);

无需使用回调, 我们将返回插件结果, 你无需导入任何内容(显然需要导入cordova)。

如果你的代码不是异步的, 则需要使用前面的示例, 如果需要以异步模式执行回调, 则需要首先返回一些内容, 但没有这样的响应:

public boolean execute(String action, JSONArray data, CallbackContext callbackContext) throws JSONException {
   // Execute an asynchronous task
   cordova.getThreadPool().execute(new Runnable() {
        public void run() {
            // Then you're allowed to execute more than twice a callback.
            PluginResult resultA = new PluginResult(PluginResult.Status.OK, "myfirstJSONResponse");
            resultA.setKeepCallback(true);
            callbacks.sendPluginResult(resultA);

            // Some more code

            Boolean something = true;

            // bla bla bla code


            PluginResult resultB = new PluginResult(PluginResult.Status.OK, "secondJSONResponse");
            resultB.setKeepCallback(true);
            callbacks.sendPluginResult(resultB);       
        }
   });



  PluginResult pluginResult = new  PluginResult(PluginResult.Status.NO_RESULT); 
  pluginResult.setKeepCallback(true); // Keep callback

  return true;
}
微信公众号
手机浏览(小程序)
0
分享到:
没有账号? 忘记密码?