【问题标题】:does not implement interface member 'IComparable.CompareTo(Object)'不实现接口成员'IComparable.CompareTo(Object)'
【发布时间】:2017-09-21 07:23:21
【问题描述】:

我有一个 .aar 安卓文件。我正在尝试在我的 xamarin.android 应用程序中使用它。我按照链接https://developer.xamarin.com/guides/android/advanced_topics/binding-a-java-library/binding-an-aar/

中给出的步骤进行操作

但是当我尝试构建我的库时出现以下错误

"没有实现接口成员'IComparable.CompareTo(Object)'"

我找到了一些解决方案,其中提到在 metadata.xml 中我们需要添加一些属性。所以我在那里添加了以下行

path="/api/package[@name='com.logicjunction.ljindoorandroidsdk']/class[@name='FloorPlanBeaconsMapping']/implements[@name='java.lang.Comparable']" 

name="type">java.lang.Comparable>

但仍然出现同样的错误。我该如何解决这个问题?

【问题讨论】:

  • 您是否尝试使用 int Java.Lang.IComparable.CompareTo(Java.Lang.Object obj) 方法将部分类添加到 Additions 文件夹?
  • 你有它的示例代码吗?
  • 检查这个:sorokoletov.com/2016/02/29/… 从:“为了解决第三个问题,我们需要在 Additions 文件夹中添加一个部分类:”
  • 我尝试了给定的解决方案,但仍然遇到同样的问题。 metadata.xml 文件中添加的行中是否有任何问题?
  • 能分享一下.arr文件吗?

标签: android xamarin xamarin.android aar


【解决方案1】:

在没有接口实现 IComparable.CompareTo 的情况下构建库时出现错误:

要解决此问题,需要在“Additions”文件夹中创建需要接口成员实现“IComparable.CompareTo(Object)”的库类的部分类,如下所示:

命名空间应该和绑定库中的一样,在这种情况下,它是:“Hirondelle.Date4j”。

using Java.Lang;
namespace Hirondelle.Date4j
{
    public partial class DateTime : Object, IComparable
    {
        int IComparable.CompareTo(Object obj)
        {
            return CompareTo((DateTime)obj);
        }
    }
}

那么这个库应该已经构建成功了。

【讨论】:

  • 我在行return CompareTo((DateTime)obj) 我收到错误The name 'CompareTo' does not exist in the current context。
  • 应该检查已安装的包和引用。 CompareTo 位于命名空间 Java.Lang->IComparable->CompareTo 到 Mono.Android.dll。还要为库安装 Xamarin.Android.Support.v4 包。
  • 同样的问题我没有得到 CompareTo
【解决方案2】:

所以我遇到了同样的问题,我可以通过帮助编译器在Metada.xml(Transforms 文件夹)中添加这些行来解决它:

<add-node path="/api/package[@name='<JAVA_PACKAGE_NAME>']/class[@name='<CLASS_NAME>']">
    <method name="compareTo" return="int" abstract="false" native="false" synchronized="false" static="false" final="false" deprecated="not deprecated" visibility="public">
        <parameter name="p0" type="java.lang.Object" />
    </method>
</add-node>

【讨论】:

  • 这是为我修复它的最干净的方法。谢谢!
  • 在这个例子中,包名和类名应该是什么?
  • @theNoob 这将是您使用此节点添加的方法的包和类名称。所以如果包含该方法的类是 com.my.package.AwesomeClass,那么包名就是 com.my.package,类名就是 AwesomeClass。
猜你喜欢
  • 1970-01-01
  • 2013-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多