【问题标题】:Xamarin Android Binding: how to use an interface from libraryXamarin Android Binding:如何使用库中的接口
【发布时间】:2016-04-26 16:04:45
【问题描述】:

我的 Xamarin Android Binding 项目(修复了几个重复的方法后)编译正确。

现在我必须使用库中的接口。 在 Java 中我是这样做的:

private PCLIAE87Events btProtListener;
btProtListener = new PCLIAE87Events () {
    @Override
    public void onLibraryStarted(PCLIAE87 library) {
        btProtLibrary = library;
    }
};

在 C# 中我该怎么做? 我必须将此接口传递给函数

PCLIAE87.StartLibrary(this, new PCLIAE87Events())

但是作为方法参数传递的接口在 C# 中不起作用。

C#中的Java接口PCLIAE87Events被自动绑定为IPCLIAE87Events(公共接口IPCLIAE87Events:IAbstractPCLEvents,IJavaObject,IDisposable)

我还尝试创建一个实现接口及其方法的类:

class PCLIAE87EventsImplementation : Java.Lang.Object, IPCLIAE87Events
{
    public void OnLibraryStarted(Java.Lang.Object p0)
    {
        throw new NotImplementedException();
    }

    public void OnPOSConnected()
    {
        throw new NotImplementedException();
    }

    public void OnPOSDisconnected()
    {
        throw new NotImplementedException();
    }
}

但我得到了这个错误

PCLIAE87EventsImplementation 不是抽象的,不会覆盖 AbstractPCLEvents 中的抽象方法 onLibraryStarted(PCLIAE87)

我认为与 Xamarin 绑定错误有关,也许有人可以建议我在哪里检查?

谢谢!

【问题讨论】:

    标签: android xamarin binding


    【解决方案1】:

    C# 不支持匿名类创建。所以你必须创建一个实现这个接口的类。据我所知,它应该是这样的:

    class PCLIAE87EventsImplementation : PCLIAE87Events 
    {
        piblic void OnLibraryStarted(PCLIAE87 library) 
        {
             btProtLibrary = library;
        }
    }
    

    那你应该可以打电话了

    PCLIAE87Events btProtListener = new PCLIAE87EventsImplementation();
    PCLIAE87.StartLibrary(this, btProtListener);
    

    【讨论】:

    • 谢谢,我也试过你的解决方案(请看我更新的帖子)
    • 我不是很确定,但是尝试将参数类型更改为IPCLIAE87 或尝试将onLibraryStarted 写成一个小的o
    猜你喜欢
    • 1970-01-01
    • 2018-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-10
    • 2016-06-03
    • 1970-01-01
    相关资源
    最近更新 更多