【问题标题】:How to reference 'this' inside an interface listener implemented with NativeScript?如何在使用 NativeScript 实现的接口侦听器中引用“this”?
【发布时间】:2019-09-13 19:43:54
【问题描述】:

在 Java 中,我有以下代码的文档:

import com.creator.creatorandroidsdk.terminal.DeviceSelectionListener
import com.creator.creatorandroidsdk.TerminalListManager;

public class ConfigPinPadActivity extends Activity implements DeviceSelectionListener {

        TerminalListManager terminalListManager;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            terminalListManager = new TerminalListManager(this,getApplicationContext());
            terminalListManager.startTerminalsDiscovery();
        }

//...

}

this 被发送到类方法作为对实现本身实例的引用:

terminalListManager = new TerminalListManager(this,getApplicationContext());

我尝试在 NativeScript 中复制代码,但引用不起作用:

const { DeviceSelectionListener } = com.creator.creatorandroidsdk.terminal
const { TerminalListManager } = com.creator.creatorandroidsdk

const superProto = androidx.appcompat.app.AppCompatActivity.prototype

androidx.appcompat.app.AppCompatActivity.extend(
  'com.company.configPinPadActivity',
  {
    interfaces: [DeviceSelectionListener],
    terminalListManager: {},
    onCreate: function (savedInstanceState) {

      console.log('OnCreated fired') // <- It works.
      this.terminalListManager = new TerminalListManager(this, utilsModule.ad.getApplicationContext())

出现了这个特定的错误。

JNI ERROR (app bug): attempt to pass an instance of com.company.configPinPadActivity as argument 1 to void com.creator.creatorandroidsdk.TerminalListManager.<init>(com.creator.creatorandroidsdk.terminal.DeviceSelectionListener, android.content.Context)

JNI DETECTED ERROR IN APPLICATION: bad arguments passed to void com.creator.creatorandroidsdk.TerminalListManager.<init>(com.creator.creatorandroidsdk.terminal.DeviceSelectionListener, android.content.Context) (see above for details)

我真的想将com.company.configPinPadActivity 实现的实例传递给new TerminalListManager,并且由于com.company.configPinPadActivity 实现DeviceSelectionListener,我不明白为什么这不起作用。

如何从实现本身中引用实现的实例?

【问题讨论】:

    标签: nativescript


    【解决方案1】:

    看起来您将 TerminalListManager 混淆为接口。您不能实例化接口(新的 TerminalListManager),只能实例化此类接口。

    如果您添加 TerminalListManager 的源代码会有所帮助。如果您尝试将“this”传递给 TerminalListManager 构造函数,则需要具有第一个参数 ConfigPinPadActivity 的类型(或 Activity,如果您打算重新使用 TerminalListManager)或类型为 DeviceSelectionListener

    【讨论】:

    • 在其他任何事情之前,这很快。就像乌塞恩·博尔特一样快。说真的,我很惊讶。 TerminalListManager 接受两个参数。第一个似乎是问题:第一个被描述为pDeviceSelectionListener。我可以通过com.creator.creatorandroidsdk.terminal.DeviceSelectionListener 访问它的类。不幸的是,这个类被编译了(.class 文件)。
    • 我认为值得一提的是,Java 中的文档是由制作接口的人提供的。我假设 Java 代码是正确的。
    • DeviceSelectionListener 的导入语句是什么?应该是:com.creator.creatorandroidsdk.terminal.DeviceSelectionListener
    • 我已经用 import 语句更新了代码。
    • Java 代码工作正常吗? (应该)如果是这样,那么问题仅出在 NativeScript 代码上……我对此没有任何经验。
    猜你喜欢
    • 1970-01-01
    • 2021-03-03
    • 1970-01-01
    • 2018-05-13
    • 2017-07-25
    • 1970-01-01
    • 2019-12-02
    • 2018-07-04
    • 2014-07-30
    相关资源
    最近更新 更多