【问题标题】:unable to send callback to more than one cordova.exec无法向多个 cordova.exec 发送回调
【发布时间】:2014-11-04 09:17:12
【问题描述】:

我正在构建一个phonegap 应用程序,并使用cordova.exec 从中调用了一个java 本机插件。 我被卡在了意想不到的地方。

我在一个循环中多次调用cordova.exec。这些本地插件也在执行异步任务。但令人惊讶的是,它只为第一次调用cordova.exec() 调用返回回调。我希望它在我上次调用 cordova.exec() 时返回到 javascript。

请帮忙。 我的代码如下----

Javascript 代码-

  $( "input:checked" ).each(function() 
       { 
            cordova.exec(callbacksuccess,callbackerror,'MyPlugin','plugin1',[path,pckg,id]); 
        });
    function callbacksuccess(e)
    {
     alert(e);
    }
    function callbackerror()
    { 
    alert('error');
    }

Java Native Plugin 代码-

if (action.equals("plugin1"))
    { 
      new DownloadManager().execute(myurl);
      return true;
    }
   public class DownloadManager extends AsyncTask<String, String, String> 
{  
 @Override
 public String doInBackground(final String... arg0)
 {
     try
     {
         downloadapk(arg0[0]);
         installapk();
         System.out.println("Download Complete");
         PluginResult result = new PluginResult(PluginResult.Status.OK, "success");
         result.setKeepCallback(true);
         callback.success("done");
         return null;
      }
        catch(Exception e)
        {
           callback.error("Some problem occured.Try again later");
           return null;
        }                       
}
}

假设我选择了 5 个列表项。它只返回一次“完成”。对于第一个 cordova.exec 函数,callbacksuccess 函数只调用一次。我没有找到任何解决方案。 提前感谢

【问题讨论】:

  • 你这个是怎么解决的?以下答案对我不起作用..

标签: java javascript android cordova


【解决方案1】:

试试这个。

1.在你插件的execute()方法中保存你得到的callbackId并返回一个NO_RESULT插件结果并将keep callback id设置为true。

PluginResult pluginResult = new  PluginResult(PluginResult.Status.NO_RESULT); 
pluginResult.setKeepCallback(true); 
return pluginResult;

2.当您的异步 java 方法完成时,返回另一个插件结果,如下所示:

PluginResult result = new PluginResult(PluginResult.Status.OK, data); 
result.setKeepCallback(false); 
this.success(result, this.myCallbackId);

【讨论】:

  • 谢谢先生。我之前没有考虑过。您的解决方案解决了这个问题。再次感谢您。
  • 欢迎您,如果您觉得解决方案有用,请点赞。
  • 实际上投票需要最低声望。我还没有达到。
  • @Aravin 这里指的是 CallbackContext 的对象,使用该对象可以获得 callBackId,如:callbackContext.getCallbackId()。
  • pluginResult.setKeepCallback(true); 状态为 OK 让插件返回进度。科尔多瓦文档中并不清楚。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多