gpt4 book ai didi

java - 如何在 Nativescript 中使用接口(interface)类型参数调用 Java 方法(自定义类)

转载 作者:太空宇宙 更新时间:2023-11-04 10:46:37 25 4
gpt4 key购买 nike

我正在创建一个 Nativescript 插件。它包含一个自定义 Android 库 (AAR),我想从 Typescript 代码中使用它。当我(在设备或模拟器中)运行演示时,在调用此 registerListener 方法时收到 TypeError: sender.registerListener is not a function 错误,这很奇怪,因为我能够调用同一对象的其他方法。

我认为这可能是因为我没有正确实现作为参数所需的接口(interface)。我认为我可以用代码更好地解释它:

Sender.java:我将在 Typescript 中使用的公共(public)类:

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参数必须实现的接口(interface):

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);
}
}

如果我在我的 NativeScript 应用程序中包含 WearMessaging.send("/demo", "Hola"); 它可以正确编译并运行,则可以成功调用 Java 方法。但如果我运行:

WearMessaging.registerListener((messagePath: string, messageReceived: string) => {
console.log(messagePath);
console.log(messageReceived);
});

应用程序在运行时停止并抛出:TypeError: sender.registerListener is not a function引用myplugin.android.ts文件。

我正在疯狂地尝试让这项工作成功,所以,如果你有任何线索,请告诉我。正如我所说,我认为这是因为我在实现接口(interface)时遗漏了一些东西,并且因为参数类型与它们不匹配,所以方法未被识别,但也许我错了。

在这里你可以看到一些官方文档: 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

因此,如果您需要做类似的事情,问题代码似乎没问题。

关于java - 如何在 Nativescript 中使用接口(interface)类型参数调用 Java 方法(自定义类),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48332526/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com