Xamarin Android绑定库-不实现继承的抽象成员

时间:2018-07-31 11:31:56

标签: xamarin

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

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

并在我的课程中生成以下函数

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

当我尝试将关键字从虚拟更改为覆盖

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没有泛型,这可能是这里的问题。

请帮助。

1 个答案:

答案 0 :(得分:0)

在对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”。

enter image description here

通过这些设置,我可以将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;
    }