2014-03-19 56 views
1

我創建了cordova-plugin在Android中進行本地調用。在cordova插件的exec函數中,我有callbackContext,通過它我可以從cordova-plugin調用javascript函數。問題是我無法通過callbackContext在一段時間後調用javascript函數。IBM Worklight插件連接沒有發生

public boolean execute(String action, JSONArray args, CallbackContext callbackContext) 
throws JSONException { 
    if (NFC_INIT_ACTION.equals(action)) { 
     context = this.cordova.getActivity().getApplicationContext(); 
     WalletRuntimeStore.setContext(context); 
     nfc = NFCService.getInstance(); 
     HelloWorldPlugin(data, callbackContext); 
     return true; 
    } 

如果IM的execute方法中調用HelloWorldPlugin的工作,如果我把它外面的執行方法是不工作...

+0

您希望我們如何幫助您?編輯問題並詳細解釋您是如何創建插件的,無論您是在config.xml中聲明它,提供代碼片段(甚至是演示項目)以及您發現的任何錯誤消息。 –

+0

是的,我在config.xml中聲明過。 – manjakannar

+1

我不知道我完全理解你的問題,但請記住,你只有在execute方法中有CallbackContext變量,所以你可以將它傳遞給另一個函數的唯一方法是從execute方法中調用它,但您可以將callbackContext傳遞給另一個函數,即使在另一個線程中,也可以在完成後調用它。我希望這有幫助。如果沒有,請更詳細地編輯問題。 –

回答

1

是我的錯,我是造成主線程等待,因此沒有任何操作正在主線程上執行。刪除了等待電話&一切開始工作。使用回調上下文的正確方法是使用PluginResult類中提供的setKeepCallback函數。 發送沒有結果回調的javascript:

@Override 
public boolean execute(String action, JSONArray args, final CallbackContext callbackContext) throws JSONException { 
// some code.... 
PluginResult result = new PluginResult(PluginResult.Status.NO_RESULT); 
result.setKeepCallback(true); 
callbackContext.sendPluginResult(result); 
// some code.... 
} 

後回調可以通過使用被髮送到JavaScript函數(可能是一個網絡電話或任何長期運行後):

PluginResult result1 = new PluginResult(PluginResult.Status.OK, data); 
result1.setKeepCallback(true); 
callbackContext.sendPluginResult(result1); 

可選我們可以通過使用sendJavascript函數從cordova插件&獲取webview refrence,從java代碼中調用javascript函數。

相關問題