无法发送回调到多个cordova.exec [英] unable to send callback to more than one cordova.exec
问题描述
我建立一个PhoneGap的应用,并使用cordova.exec呼吁从它的Java本地插件。
我坚持地方意外。
我呼吁cordova.exec多次loop.Also那些原生的插件正在执行异步task.But到惊讶的是,它的返回回调只为第一cordova.exec()调用。我希望它在我的最后cordova.exec返回的JavaScript()调用。
请帮忙。
我的code是如下----
的Javascript code -
$(输入:勾选)。每个(函数()
{
cordova.exec(的CallbackSuccess,callbackerror,为myplugin','plugin1',[路径,pckg,ID]);
});
功能的CallbackSuccess(五)
{
警报(E);
}
功能callbackerror()
{
警报('错误');
}
Java本地插件code -
如果(action.equals(plugin1))
{
新的下载管理器()执行(myurl);
返回true;
}
公共类下载管理器扩展的AsyncTask<字符串,字符串,字符串>
{
@覆盖
公共字符串doInBackground(最后弦乐...为arg0)
{
尝试
{
downloadapk(为arg0 [0]);
installapk();
的System.out.println(下载完成);
PluginResult结果=新PluginResult(PluginResult.Status.OK,成功);
result.setKeepCallback(真);
callback.success(完成);
返回null;
}
赶上(例外五)
{
callback.error(有些问题occured.Try稍后再);
返回null;
}
}
}
假如我有选择的5 listItems中。它返回完成一次。的CallbackSuccess函数被调用只是一次为第cordova.exec function.I因此未找到任何解决方案。
感谢名单提前
试试这个。
1.In你的execute()你的插件的方法保存callbackId你,并返回一个NO_RESULT插件的结果并设置保持回调ID为true。
PluginResult pluginResult =新PluginResult(PluginResult.Status.NO_RESULT);
pluginResult.setKeepCallback(真);
返回pluginResult;
块引用>2,当您的异步Java方法完成返回另一个这样的插件结果是:
PluginResult结果=新PluginResult(PluginResult.Status.OK,数据);
result.setKeepCallback(假);
this.success(结果,this.myCallbackId);
块引用>I am building a phonegap application and have called a java native plugin from it using cordova.exec. I am stuck somewhere unexpected.
I am calling cordova.exec multiple times in a loop.Also those native plugins are performing async task.But to amazement ,its returning callback only for first cordova.exec() call. I want it to return to javascript at my last cordova.exec() call.
Please help. My code is as follows----
Javascript code-
$( "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 code-
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; } } }
Suppose I have 5 listitems selected. It returns "done" just once. callbacksuccess function is called just once for the first cordova.exec function.I didnot find any solution. Thanx in advance
解决方案Try this.
1.In your execute() method of your plugin save the callbackId you get and return a NO_RESULT plugin result and set keep callback id to true.
PluginResult pluginResult = new PluginResult(PluginResult.Status.NO_RESULT); pluginResult.setKeepCallback(true); return pluginResult;
2.When your async java method finishes return another plugin result like this:
PluginResult result = new PluginResult(PluginResult.Status.OK, data); result.setKeepCallback(false); this.success(result, this.myCallbackId);
这篇关于无法发送回调到多个cordova.exec的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!