我正在尝试使用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没有泛型,这可能是这里的问题。
请帮助。
答案 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”。
通过这些设置,我可以将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;
}