如何正确更新此cordova插件? (execute()CallbackContext PluginResult)

时间:2013-04-11 14:49:23

标签: android cordova admob

我正在尝试更新在github上找到的尚未更新的插件(AdMob)

https://github.com/rajpara11/phonegap-plugins/blob/master/Android/AdMobPlugin/AdMobPlugin.java

相关代码是有效的,但需要一些修复:

public boolean execute(String action, JSONArray inputs, CallbackContext callbackContext)
{
    PluginResult result = null;

    if (ACTION_CREATE_BANNER_VIEW.equals(action)) {
        result = this.executeCreateBannerView(inputs);
    } else if (ACTION_REQUEST_AD.equals(action)) {
        result = executeRequestAd(inputs);
    } else {
        Log.d(LOGTAG, String.format("Invalid action passed: %s", action));
        callbackContext.error(String.format("Invalid action passed: %s", action));
    }

    // ...

}

我需要添加的是result变量的检查,我正在考虑做这样的事情

if(result == PluginResult.Status.OK)
{
    callbackContext.success();
    return true;
}
return false;

但当然它不起作用......我怎样才能正确更新?文档没有帮助,

我的Java不够忍者:(

提前谢谢

1 个答案:

答案 0 :(得分:2)

我在核心插件中看到这种方式的方法是在类的开头有一个私有的CallbackContext变量,然后在你的execute()中设置this.callbackContext = callbackContext现在你可以使用execute()比较操作字符串的值和委托给您的私有方法的方法。在这些方法中,您将执行callbackContext.sendPluginResult(...)。您可以根据操作是否有效在execute()中返回true或false。

所以我觉得它看起来应该是这样的:

public boolean execute(String action, JSONArray inputs, CallbackContext callbackContext)
{
    this.callbackContext = callbackContext;

    if (ACTION_CREATE_BANNER_VIEW.equals(action)) {
       this.executeCreateBannerView(inputs);
       return true;    // return true because this is a valid action
    } else if (ACTION_REQUEST_AD.equals(action)) {
        executeRequestAd(inputs);
        return true;
    } else {
        Log.d(LOGTAG, String.format("Invalid action passed: %s", action));
        return false;
        // could possibly do the following to send NO_RESULT:
        // callbackContext.sendPluginResult(newPluginResult.Status.NO_RESULT));
    }
}

然后再说:

private void executeCreateBannerView(inputs){
    //after doing all of your work:
    callbackContext.success();
    // or callbackContext.sendPluginResult() to pass data back 

}

希望这会有所帮助。