无法发送回调到多个cordova.exec [英] unable to send callback to more than one cordova.exec

查看:1474
本文介绍了无法发送回调到多个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()你的插件的方法保存cal​​lbackId你,并返回一个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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆