我试图在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);
}
这实际上(有些不明显)记录在这里