gpt4 book ai didi

android - 扩展类时出现 ClassNotFoundException

转载 作者:行者123 更新时间:2023-11-29 23:40:20 25 4
gpt4 key购买 nike

我正在使用 TypeScript 开发 NativeScript Stripe 插件。它在 iOS 上运行,现在正在尝试让它在 Android 上运行。

我已经能够成功扩展一些 Android 类(在 Extending Classes 之后)。不过,其中一个会在构造时给出 ClassNotFoundException。

我使用 android-dts-generator 创建了一个 .d.ts 文件。它给出了我扩展的类的签名(缩写):

declare module com {
export module stripe {
export module android {
export class PaymentSession {
export class PaymentSessionListener {
public constructor();
public onError(param0: number, param1: string): void;
...
}}}}}

我扩展如下:

class InternalPaymentListener extends com.stripe.android.PaymentSession.PaymentSessionListener {
constructor() {
super();
return global.__native(this);
}
init(p1, p2): InternalPaymentListener { ...; return this; }
...
}

当我尝试构造它时,使用 new InternalPaymentListener().init(p1, p2) 我得到一个 ClassNotFoundException:

JS: ERROR Error: java.lang.ClassNotFoundException: com.tns.gen.com.stripe.android.PaymentSession_PaymentSessionListener_stripe_148_28_InternalPaymentListener
JS: java.lang.Class.classForName(Native Method)
JS: java.lang.Class.forName(Class.java:453)
JS: java.lang.Class.forName(Class.java:378)
JS: com.tns.Runtime.getClassForName(Runtime.java:1023)
JS: com.tns.ClassResolver.resolveClass(ClassResolver.java:27)
JS: com.tns.Runtime.resolveClass(Runtime.java:593)
JS: com.tns.Runtime.callJSMethodNative(Native Method)
JS: com.tns.Runtime.dispatchCallJSMethodNative(Runtime.java:1101)
JS: com.tns.Runtime.callJSMethodImpl(Runtime.java:983)
JS: com.tns.Runtime.callJSMethod(Runtime.java:970)
JS: com.tns.Runtime.callJSMethod(Runtime.java:954)
JS: com.tns.Runtime.callJSMethod(Runtime.java:946)
JS: com.tns.gen.java.lang.Object_button_19_32_ClickListenerImpl.onClick(Object_button_19_32_ClickListenerImpl.java:17)
JS: android.view.View.performClick(View.java:6294)
JS: android.view.View$PerformClick.run(View.java:24770)
JS: android....

生成的 stripe.js 文件在第 148 行(我假设这是异常指向我的地方):

function InternalPaymentListener() {
var _this = _super.call(this) || this; <-- Line 148
return global.__native(_this);
}

代码编译时没有错误或警告,因此您会认为类已正确生成。它会一直运行,直到我单击导致构造此类的按钮。

有什么解决办法吗?

最佳答案

看来我找到了我自己问题的答案,这么快我都不好意思问了!

事实证明,PaymentSessionListener 是一个接口(interface),而不是一个类。我对 android-dts-generator 生成的 .d.ts 定义感到困惑。这是正确实现接口(interface)的方法(如 Extending Classes 中所述):

function createListener() {
return new com.stripe.android.PaymentSession.PaymentSessionListener({
onError(param0: number, param1: string): void { ... }
...
});
}

关于android - 扩展类时出现 ClassNotFoundException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51922378/

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