Search code examples
cordovacordova-plugins

Cordova Plugin return value


I have a cordova plugin(a message broker- mqtt) in java. From the html, I call this plugin via a javascript interface as follows:

function heartbeat() {

             MqttPlugin.heartbeat({topic: "$EDC/tum/B8:27:EB:A6:A9:8A/HEARTBEAT-V1/mqtt/heartbeat"});
        }

The following is the part inside my javascript interface:

MqttPlugin.prototype.heartbeat = function(aString){
console.log("MqttPlugin.js: subscribe");
exec(
function(result){ /*alert("Mqtt Subscribe got the value" + result)*/ },
function(result){ /*alert("Error" + reply);*/ },
"MqttPlugin",
"heartbeat",
[aString.topic]);
};

The following is my java file:

public boolean execute(String action,  JSONArray args,
                       CallbackContext callbackContext) throws JSONException {
    Log.d("Kura-MQTT", String.valueOf(status));
    if (android.os.Build.VERSION.SDK_INT >= 11) {
        final StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder()
                .permitAll().build();
        StrictMode.setThreadPolicy(policy);
    }

    if (action.equals("subscribe")) {
        this.setOpts(args);
        Log.d("Topic in subscribe", args.get(0).toString());

        //subscribe();

        this.cordova.getActivity().runOnUiThread(new Runnable() {
            @Override
            public void run() {
                subscribe();
            }
        });
        this.pluginCallbackContext = callbackContext;

        Log.d("callbackcontext", pluginCallbackContext.toString());

        return true;

    }

So basically, the java function subscribe keeps getting some messages in a fix interval. I want to send this message to my html. I went through the cordova android documentation, but that didn't help.


Solution

  • Change

     MqttPlugin.heartbeat({topic: "$EDC/tum/B8:27:EB:A6:A9:8A/HEARTBEAT-V1/mqtt/heartbeat"});
    

    to

    MqttPlugin.heartbeat({topic: "$EDC/tum/B8:27:EB:A6:A9:8A/HEARTBEAT-V1/mqtt/heartbeat"},successCallback,errorCallback);
    

    You can choose the order of the params if you want

    Then change

    MqttPlugin.prototype.heartbeat = function(aString){
    console.log("MqttPlugin.js: subscribe");
    exec(
    function(result){ /*alert("Mqtt Subscribe got the value" + result)*/ },
    function(result){ /*alert("Error" + reply);*/ },
    "MqttPlugin",
    "heartbeat",
    [aString.topic]);
    };
    

    to

    MqttPlugin.prototype.heartbeat = function(aString,success,error){
    console.log("MqttPlugin.js: subscribe");
    exec(
    success,
    error,
    "MqttPlugin",
    "heartbeat",
    [aString.topic]);
    };
    

    Finally, create a successCallback function

    function successCallback(result){
        alert("Mqtt Subscribe got the value" + result);
    }