如何在Xamarin上使用@Subscribe注释.使用Greenrobot形成Android平台.EventBus包.



我试图在Xamarin上实现EventBus,但无法订阅事件,因为当我添加注释@Subscribe()时,我得到一个错误"@Subscribe不存在于当前上下文中"。当我运行没有@Subscribe注释的应用程序时,它向我显示一个错误,说"MainActivity和它的超类没有带有@Subscribe注释的公共方法"。请帮助我如何在Xamarin Android平台上订阅Event

# MainActivity类:

public class MainActivity : Activity
{
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
Xamarin.Essentials.Platform.Init(this, savedInstanceState);
// Set our view from the "main" layout resource
//Registering Event Bus here
EventBus.Default.Register(this);

SetContentView(Resource.Layout.activity_main);
}

@Subscribe //Showing me an error while adding this annotation
public void OnEvent(NetworkInfo networkInfo)
{
Console.WriteLine(networkInfo);
}
protected void OnDestroy()
{
base.OnDestroy();
EventBus.Default.Unregister(this);
}
}
PublisherEvent class:
public class PublishEvent 
{
public PublishEvent()
{ 
EventBus.getDefault().post(message);
}
}

我不确定Xamarin Forms是否支持EventBus,并使用@Subscribe()与原生Android相同。

然而,在Xamarin Forms中也有同样的方法。您可以使用Xamarin。形式MessagingCenter为了实现这一点,它还可以订阅消息和接收消息。

发送Messaage:

MessagingCenter.Send<object>(this, "Hi");

订阅信息:

MessagingCenter.Subscribe<object> (this, "Hi", (sender) =>
{
// Do something whenever the "Hi" message is received
});

我能够通过Xamarin让Subscribe工作

我注意到这里的代码

@Subscribe //Showing me an error while adding this annotation
public void OnEvent(NetworkInfo networkInfo)
{
Console.WriteLine(networkInfo);
}

是这样实现的吗?(注意使用属性而不是Java注释)

[Subscribe] 
public void OnEvent(NetworkInfo networkInfo)
{
Console.WriteLine(networkInfo);
}

为了这个工作,Android需要将Subscribe属性转换为Java中的@Subscribe注释。Xamarin Binding Library应该正在为您创建SubscribeAttribute,如果您已经正确设置了该项目(尽管它可能明显缺少ThreadMode属性,我可能很快会为自己调查!)

无论如何,如果在相应的Java类中也没有生成OnEvent方法,则不会正确生成此属性。我发现这并没有自动发生,所以我只需要将[Export]添加到方法中。

[Export]   
[Subscribe] 
public void OnEvent(NetworkInfo networkInfo)
{
Console.WriteLine(networkInfo);
}

这实际上(有些不明显)记录在这里

最新更新