Java绑定:类型“...”在命名空间“...”中不存在。你错过了一个集会吗?

时间:2015-04-09 23:39:30

标签: xamarin spotify java-binding

我正在尝试为Spotify Android SDK创建Xamarin Java绑定。 SDK现在分为两部分,一部分用于身份验证,另一部分用于播放器。以前的java绑定工作,然而,秒给我一个错误。

Xamarin Forums上提出了原始问题。


您好,

我正在尝试为Spotify Android SDK创建一个绑定项目。

SDK分为两个.aar文件。一个用于身份验证,一个用于媒体播放(播放器)。 首先,我尝试在一个绑定项目中同时使用.aar文件,但是忽略了Player.aar。但是,将它移到自己的位置似乎有效。

现在,我的问题与生成NativePlayerNotificationCallback的Java接口IPlayerNotificationCallback有关(因此缺少og Notification),但在它试图实现的Player类中global::Com.Spotify.Android.Player.INativePlayerNotificationCallback

我在反编译文件中找不到INativePlayerNotificationCallback的其他提及。仅IPlayerNotificationCallback

我知道这有点难以想象。以下是JD-GUI中的java类文件:

JD-GUI

此处列出了生成的文件: enter image description here

文件 Com.Spotify.Sdk.Android.Player.IPlayerNotificationCallback.cs

enter image description here

错误信息本身

  

错误CS0234:namespaceCom.Spotify.Sdk.Android.Player中不存在类型或命名空间名称INativePlayerNotificationCallback'。你错过了装配参考吗?

enter image description here

我真的很感激有关如何让它发挥作用的任何见解。在我看来,界面的命名有一些不一致,但我不确定。

感谢您的帮助, 弗雷德里克

1 个答案:

答案 0 :(得分:9)

应该通过向Player绑定项目添加元数据来修复:

<metadata>
  <attr path="/api/package[@name='com.spotify.sdk.android.player']/interface[@name='NativePlayerNotificationCallback']" name="visibility">public</attr>
</metadata>

和Player类扩展(进入Additions目录):

using System.Collections;
using Java.Lang;
using Java.Util.Concurrent;

namespace Com.Spotify.Sdk.Android.Player
{
    public partial class Player
    {
        public IList InvokeAll(ICollection tasks)
        {
            return null;
        }

        public IList InvokeAll(ICollection tasks, long timeout, TimeUnit unit)
        {
            return null;
        }

        public Object InvokeAny(ICollection tasks)
        {
            return null;
        }

        public Object InvokeAny(ICollection tasks, long timeout, TimeUnit unit)
        {
            return null;
        }
    }
}

您可能需要通过调用泛型方法来正确实现这些方法。 此外,我不得不向Auth库绑定项目添加元数据(我在旧主题中找到它)并从Player项目中引用了Auth项目,因为它使用了一些类(可能没有必要)。