如何从cordova.exec()获取返回值

时间:2014-08-12 10:09:56

标签: android cordova adt

您好我很困惑,如何从cordova.exec获取返回类型。每次返回未定义的值。

我的Cordova版本是:3.5.0(最新)

我的目标是从html文件调用Java类。 java类处理一些数据,比如来自SOAP webservice和Java类的get数据,将一些数据返回给html / js,并且我可以借助Javascript / Jquery在html文件中绘制数据。

这是我的脚本。 从 Sample.html 我发送一个值(var value = SampleJavaClass.echo("Arg frm login");)到 samplejavaclass.js 并且js调用本机Java类并添加一条消息返回实际消息。然后我想在 Sample.html 文件中获取数据并执行一些任务。

SampleJavaClass.java。

我想在这个类中处理一些数据。例如。致电soap webservice

public class SampleJavaClass extends CordovaPlugin {

    public void initialize(CordovaInterface cordova, CordovaWebView webView) {
        super.initialize(cordova, webView);
    }

    @Override
    public boolean execute(String action, JSONArray args,
            final CallbackContext callbackContext) throws JSONException {

        try {
            if (action.equals("echo")) {
                final String message = args.getString(0);
                cordova.getActivity().runOnUiThread(new Runnable() {
                    public void run() {
                        String retMsg = "SUCCESS " + message;
                        callbackContext.sendPluginResult(new PluginResult(Status.OK, retMsg));
                    }
                });
            }
            return true;
        } catch (JSONException e) {
            callbackContext.sendPluginResult(new PluginResult(
                    PluginResult.Status.JSON_EXCEPTION));
            return false;
        }
    }

    public void echo(String message, CallbackContext callbackContext) {
        if (message != null && message.length() > 0) {
            //callbackContext.success("SUCCESS " + message);
            String retMsg = "SUCCESS " + message;
            callbackContext.sendPluginResult(new PluginResult(Status.OK, retMsg));
        } else {
            callbackContext.error("Expected one non-empty string argument.");
        }
    }
}

simplejavaclass.js

function SampleJavaClass() {
}

function nativePluginResultHandler(result) {
    alert("SUCCESS: \r\n" + result);
}

function nativePluginErrorHandler(error) {
    alert("ERROR: \r\n" + error);
}

SampleJavaClass.echo = function(arg) {
//  var failureCallback = function() {
//      console.log("Not able to retrive ");
//  };

    return cordova.exec(nativePluginResultHandler, nativePluginErrorHandler,
            "SampleJavaClass", "echo", [ arg ]);
};

Sample.html

var value = SampleJavaClass.echo("Arg frm login");
alert("Return Value in login  :: " + value);

simplejavaclass.js 中打印警报。这意味着它成功执行。但在 Sample.html 中,警告中显示的值为未定义

如果我做错了,请告诉我一个出路。

谢谢

1 个答案:

答案 0 :(得分:0)

在sample.html中,您将获得echo函数的返回值。这意味着,您的“值”实际上等于cordova.exec方法的返回值,而不是成功回调的响应,因此您的“值”变量未定义。