8

我正在尝试 Android 绑定库,但遇到以下错误 -

“ReaderCollectionImpl”未实现继承的抽象成员“AbstractList.Get(int)”

并且在我的班级中生成了以下函数

public virtual unsafe global::Com.Digitalpersona.Uareu.IReader Get (int n)
{
}

当我尝试将关键字从 virtual 更改为 override

public override unsafe global::Com.Digitalpersona.Uareu.IReader Get (int n)
{
}

我得到这个错误 -

“ReaderCollectionImpl.Get(int)”:返回类型必须为“Object”以匹配被覆盖的成员“AbstractList.Get(int)”

我无法更改我的返回类型。我也尝试使用new关键字,但它并没有帮助我。

该类在 Java 本机代码中如下所示 -

public class ReaderCollectionImpl extends AbstractList<Reader> implements ReaderCollection
{
}

在 C# 中将其转换为 -

public partial class ReaderCollectionImpl : global::Java.Util.AbstractList 
{
}

我的猜测是Java.Util.AbstractList没有泛型,这可能是这里的问题?

4

1 回答 1

1

在反编译 dpuareu.jar 并查看原始代码后,我设法通过在 Metadata.xml 中添加这些行来毫无问题地编译它。

 <attr path="/api/package[@name='com.digitalpersona.uareu.dpfpdd']/class[@name='ReaderCollectionImpl']/ method[@name='get']" name="managedReturn">Java.Lang.Object</attr>
 <attr path="/api/package[@name='com.digitalpersona.uareu.dpfpdd']/class[@name='ReaderCollectionImpl.ReaderImpl']" name="visibility">public</attr>

下一步是将所有“so”添加到项目中,右键单击它们并选择“Build Action”到“EmbeddedReferenceJar”。

在此处输入图像描述

通过这些设置,我可以将 DLL 的引用添加到我的 Xamarin.Android 项目并调用此行而不会出错。我什至可以调用下面的 GetName() 并获取连接的扫描仪的名称。这应该作为进一步发展的起点。

    ReaderCollectionImpl readerCollection;

    public ReaderCollectionImpl GetReaders()
    {
        try
        {
            readerCollection = (ReaderCollectionImpl)UareUGlobal.GetReaderCollection(Android.App.Application.Context);
            readerCollection.GetReaders();                

            return readerCollection;
        }
        catch(UareUException ex)
        {
            throw ex;
        }
        catch(Exception ex)
        {
            throw ex;
        }
    }

    public int GetSize()
    {
        return readerCollection.Size();
    }

    public string GetName()
    {
        return (readerCollection.Get(0) as ReaderCollectionImpl.ReaderImpl).Description.Name;
    }
于 2019-07-19T03:06:53.073 回答