2014-11-04 89 views
0

我正在構建一個phonegap應用程序,並使用cordova.exec從它調用了一個java原生插件。 我被卡住了意想不到的地方。無法發送回調到多個cordova.exec

我在一個循環中多次調用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本機插件代碼 -

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個listItems中。它只返回「完成」一次。 callbacksuccess函數只針對第一個cordova.exec函數調用一次。我沒有找到任何解決方案。 Thanx提前

+0

你解決了這個一個怎麼樣?下面的答案不適合我.. – Aravin 2014-12-23 19:13:29

回答

3

試試這個。

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); 
+0

Thankyou先生。我以前沒有想過。你的解決方案解決了混亂。再次感謝你。 – megha 2014-11-05 12:10:34

+0

歡迎您,如果您發現解決方案有用,請立即註冊。 – 2014-11-05 12:29:51

+0

實際投票要求最低聲望。我沒有得到它。 – megha 2014-11-05 12:37:50