创建 Android NativeScript 插件
Creating an Android NativeScript plugin
我正在尝试创建一个允许 NativeScript 应用程序连接到 MQTT 服务器的插件。当我尝试 运行 应用程序时,我的应用程序出现以下错误:
java.lang.RuntimeException: Unable to start activity
ComponentInfo{org.nativescript.testMQTT/com.tns.NativeScriptActivity}:
com.tns.NativeScriptException: Calling js method onCreate failed
TypeError: Cannot read property 'paho' of undefined File: ",
line: 1, column: 265
StackTrace: Frame: function:'NativeScriptMQTTClient',
file:'/data/data/org.nativescript.testMQTT/files/app/tns_modules/nativescript-mqtt/mqtt.js',
line: 8, column: 44 Frame: function:'',
file:'/data/data/org.nativescript.testMQTT/files/app/main-page.js',
line: 4, column: 14 Frame: function:'require', file:'', line: 1,
column: 266 Frame: function:'global.loadModule',
file:'/data/data/org.nativescript.testMQTT/files/app/tns_modules/globals/globals.js',
line: 19, column: 16 Frame: function:'resolvePageFromEntry',
file:'/data/data/org.nativescript.testMQTT/files/app/tns_modules/ui/frame/frame-common.js',
line: 72, column: 40 Frame: function:'Frame.navigate',
file:'/data/data/org.nativescript.testMQTT/files/app/tns_modules/ui/fr
我在 mqtt.android.ts 文件中将以下代码与 Paho Java 库一起使用:
export class NativeScriptMQTTClient {
private _topic: String;
private _content: String;
private _qos: number;
private _broker: String;
private _clientId: String;
private _persistance: org.eclipse.paho.client.mqttv3.persist.MemoryPersistance;
private _client: org.eclipse.paho.client.mqttv3.MqttClient;
private _connectOptions: org.eclipse.paho.client.mqttv3.MqttConnectOptions;
constructor(topic: String, qos: number, broker: string, clientId: String) {
this._topic = topic;
this._qos = qos;
this._broker = broker;
this._clientId = clientId;
this._persistance = new org.eclipse.paho.client.mqttv3.persist.MemoryPersistance();
}
connect() {
this._client = new org.eclipse.paho.client.mqttv3.MqttClient(this._broker, this._clientId, this._persistance);
this._connectOptions = new org.eclipse.paho.client.mqttv3.MqttConnectOptions();
this._connectOptions.setCleanSession(true);
console.log("Connecting to the broker: " + this._broker);
this._client.connect(this._connectOptions);
console.log("Connected to the broker: " + this._broker);
console.log("Publishing message: Hello from NativeScript (Morné)");
this._client.publish(this._topic, "Hello from NativeScript (Morné)");
console.log("Published message: Hello from NativeScript (Morné)");
console.log("Disconnecting from the broker: " + this._broker);
this._client.disconnect();
console.log("Disconnected from the broker: " + this._broker);
}
}
我的主page.ts文件中有以下代码:
import {NativeScriptMQTTClient} from "nativescript-mqtt";
let client: NativeScriptMQTTClient = new NativeScriptMQTTClient("MQTT Examples", 2, "tcp://iot.eclipse.org:1883", "NativeScriptClient");
client.connect();
如有任何帮助,我们将不胜感激。
基于 MQTT api 参考 我注意到以下内容
其MemoryPersistence
在你的代码中是 MemoryPersistance
this._persistance = new org.eclipse.paho.client.mqttv3.persist.MemoryPersistence();
确保您已将 .jar 文件包含在 platforms/Android/libs
(link to MQTT jar file v1.0.2)
您的 package.json 应该看起来像这样
(如果您使用 TypeScript 编写代码,请确保插件中已转译 mqtt.android.js 文件)
{
"name": "nativescript-mqtt",
"version": "0.0.3",
"main": "mqtt.js",
"nativescript": {
"platforms": {
"tns-android": {
"version": "1.7.1"
},
"tns-ios": {
"version": "1.7.0"
}
}
}
}
你也应该参考你的插件,比如
var mqttModule = require("nativescript-mqtt");
let client = new mqttModule.NativeScriptMQTTClient("MQTT Examples", 2, "tcp://test.mosquitto.org:1883", "NativeScriptClient");
此时我收到
JS: Connecting to the broker: tcp://test.mosquitto.org:1883
从那时起,您应该使用正确的 d.ts 文件和逻辑导出您的连接方法。希望这些信息对您的项目有所帮助!
我正在尝试创建一个允许 NativeScript 应用程序连接到 MQTT 服务器的插件。当我尝试 运行 应用程序时,我的应用程序出现以下错误:
java.lang.RuntimeException: Unable to start activity ComponentInfo{org.nativescript.testMQTT/com.tns.NativeScriptActivity}: com.tns.NativeScriptException: Calling js method onCreate failed
TypeError: Cannot read property 'paho' of undefined File: ", line: 1, column: 265
StackTrace: Frame: function:'NativeScriptMQTTClient', file:'/data/data/org.nativescript.testMQTT/files/app/tns_modules/nativescript-mqtt/mqtt.js', line: 8, column: 44 Frame: function:'', file:'/data/data/org.nativescript.testMQTT/files/app/main-page.js', line: 4, column: 14 Frame: function:'require', file:'', line: 1, column: 266 Frame: function:'global.loadModule', file:'/data/data/org.nativescript.testMQTT/files/app/tns_modules/globals/globals.js', line: 19, column: 16 Frame: function:'resolvePageFromEntry', file:'/data/data/org.nativescript.testMQTT/files/app/tns_modules/ui/frame/frame-common.js', line: 72, column: 40 Frame: function:'Frame.navigate', file:'/data/data/org.nativescript.testMQTT/files/app/tns_modules/ui/fr
我在 mqtt.android.ts 文件中将以下代码与 Paho Java 库一起使用:
export class NativeScriptMQTTClient {
private _topic: String;
private _content: String;
private _qos: number;
private _broker: String;
private _clientId: String;
private _persistance: org.eclipse.paho.client.mqttv3.persist.MemoryPersistance;
private _client: org.eclipse.paho.client.mqttv3.MqttClient;
private _connectOptions: org.eclipse.paho.client.mqttv3.MqttConnectOptions;
constructor(topic: String, qos: number, broker: string, clientId: String) {
this._topic = topic;
this._qos = qos;
this._broker = broker;
this._clientId = clientId;
this._persistance = new org.eclipse.paho.client.mqttv3.persist.MemoryPersistance();
}
connect() {
this._client = new org.eclipse.paho.client.mqttv3.MqttClient(this._broker, this._clientId, this._persistance);
this._connectOptions = new org.eclipse.paho.client.mqttv3.MqttConnectOptions();
this._connectOptions.setCleanSession(true);
console.log("Connecting to the broker: " + this._broker);
this._client.connect(this._connectOptions);
console.log("Connected to the broker: " + this._broker);
console.log("Publishing message: Hello from NativeScript (Morné)");
this._client.publish(this._topic, "Hello from NativeScript (Morné)");
console.log("Published message: Hello from NativeScript (Morné)");
console.log("Disconnecting from the broker: " + this._broker);
this._client.disconnect();
console.log("Disconnected from the broker: " + this._broker);
}
}
我的主page.ts文件中有以下代码:
import {NativeScriptMQTTClient} from "nativescript-mqtt";
let client: NativeScriptMQTTClient = new NativeScriptMQTTClient("MQTT Examples", 2, "tcp://iot.eclipse.org:1883", "NativeScriptClient");
client.connect();
如有任何帮助,我们将不胜感激。
基于 MQTT api 参考 我注意到以下内容
其MemoryPersistence 在你的代码中是 MemoryPersistance
this._persistance = new org.eclipse.paho.client.mqttv3.persist.MemoryPersistence();
确保您已将 .jar 文件包含在 platforms/Android/libs (link to MQTT jar file v1.0.2)
您的 package.json 应该看起来像这样 (如果您使用 TypeScript 编写代码,请确保插件中已转译 mqtt.android.js 文件)
{
"name": "nativescript-mqtt",
"version": "0.0.3",
"main": "mqtt.js",
"nativescript": {
"platforms": {
"tns-android": {
"version": "1.7.1"
},
"tns-ios": {
"version": "1.7.0"
}
}
}
}
你也应该参考你的插件,比如
var mqttModule = require("nativescript-mqtt");
let client = new mqttModule.NativeScriptMQTTClient("MQTT Examples", 2, "tcp://test.mosquitto.org:1883", "NativeScriptClient");
此时我收到
JS: Connecting to the broker: tcp://test.mosquitto.org:1883
从那时起,您应该使用正确的 d.ts 文件和逻辑导出您的连接方法。希望这些信息对您的项目有所帮助!