[英]How to call Java method (custom class) with an interface typed parameter in Nativescript
我正在创建一个Nativescript插件。 它包括一个自定义的Android库(AAR),我想从Typescript代码中使用它。 当我运行演示时(在设备或仿真器中),我收到TypeError: sender.registerListener is not a function
调用此registerListener
方法时TypeError: sender.registerListener is not a function
错误,这很奇怪,因为我能够调用同一对象的其他方法。
我认为这可能是因为我没有正确实现所需的参数接口。 我认为我可以用代码更好地解释它:
Sender.java:我将在Typescript中使用的公共类:
package com.berriart.android.myplugin;
public class Sender {
public static final String TAG = "Sender";
private Context _context = null;
public Sender(Context context) {
_context = context;
}
public void send(final String messagePath, final String messageToSend) {
if (Log.isLoggable(TAG, Log.INFO)) {
Log.i(TAG, "Send call: " + messagePath + " " + messageToSend);
}
}
public void registerListener(MessageListener listener) {
if (Log.isLoggable(TAG, Log.INFO)) {
Log.i(TAG, "registerListener");
}
}
// Other code here
}
MessageListener.java:必须由registerListener
参数实现的接口:
package com.berriart.android.myplugin;
public interface MessageListener {
void receive(String messagePath, String messageReceived);
}
这是插件(的)的Typescript(Nativescript)代码:
import * as app from "tns-core-modules/application";
export class WearMessaging {
public static send(messagePath: string, messageToSend: string) {
let sender = new com.berriart.android.myplugin.Sender(app.android.context);
sender.send(messagePath, messageToSend);
}
public static registerListener(receiveCallback: (messagePath: string, messageReceived: string) => void) {
let messageListener = new com.berriart.android.myplugin.MessageListener({
receive: receiveCallback
});
let sender = new com.berriart.android.myplugin.Sender(app.android.context);
sender.registerListener(messageListener);
}
}
如果我包含WearMessaging.send("/demo", "Hola");
在我的nativescript应用程序中,它可以编译并正常运行,称为Java方法成功。 但是如果我运行:
WearMessaging.registerListener((messagePath: string, messageReceived: string) => {
console.log(messagePath);
console.log(messageReceived);
});
应用程序在运行时停止并抛出: TypeError: sender.registerListener is not a function
myplugin.android.ts
文件TypeError: sender.registerListener is not a function
。
我为使这项工作变得疯狂,所以,如果您有任何线索,请告诉我。 就像我说的那样,这是因为实现接口时我缺少了一些东西,并且由于参数类型与它们不匹配,因此无法识别方法,但是也许我错了。
在这里您可以看到一些官方文档: https : //docs.nativescript.org/runtimes/android/generator/extend-class-interface
提前致谢。
好的,我解决了:S
似乎增量构建做错了什么。 手动删除演示的构建文件后,一切正常:
rm -rf platforms/android/build/*
rm -rf platforms/android/app/build/*
# Then build & deploy again
因此,如果您需要执行类似的操作,则问题代码似乎很好。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.