无法将回调发送到多个cordova.exec

时间:2014-11-04 09:17:13

标签: java javascript android cordova

我正在构建一个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个列表项。它返回&#34;完成&#34;就一次。 callbacksuccess函数只为第一个cordova.exec函数调用一次。我没有找到任何解决方案。 Thanx提前

1 个答案:

答案 0 :(得分:3)

试试这个。

1.在插件的execute()方法中保存callbackId并返回NO_RESULT插件结果并将call call 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);