Articles of greenrobot eventbus

AndroidAnnotations和EventBus

我在库中有一个带注释的Activity,它是来自同一个库的EventBus事件的订阅者。 它看起来像这样,大大简化了: @EActivity(resName = “activity_foo”) public class Foo extends Activity { public void onEvent(BarEvent event){ doSomething(); } } 它应该按照这样工作: http://timnew.me/blog/2014/09/14/otto-and-android-annotations-compatibility-issue-analysis/ 但实际上它会返回此错误: 无法启动活动… de.greenrobot.event.EventBusException:订阅者类com.foo.bar.activities.Foo_没有名为onEvent的公共方法 似乎EventBus不会查看父类。 我想每个人都在讨论的@Subscribe注释仅在Guava和Otto中,但不在EventBus中。 没有人在谈论网络上的AA和Eventbus之间的兼容性问题,所以我必须遗漏一些东西。 我怎样才能做到这一点? EventBus:2.4 AA:3.2 编辑 : 在WonderCsabo的回答之后,我将EventBus更新到3.0 beta(包括订阅注释)和AA到3.3.1并且问题消失了,但还有另外一个: java.lang.NoSuchFieldError at libcore.reflect.AnnotationAccess.decodeValue(AnnotationAccess.java:688) at libcore.reflect.AnnotationAccess.getDefaultValue(AnnotationAccess.java:361) at java.lang.reflect.Method.getDefaultValue(Method.java:327) at libcore.reflect.AnnotationFactory.getElementsDescription(AnnotationFactory.java:75) at libcore.reflect.AnnotationFactory.(AnnotationFactory.java:112) at libcore.reflect.AnnotationFactory.createAnnotation(AnnotationFactory.java:94) at libcore.reflect.AnnotationAccess.toAnnotationInstance(AnnotationAccess.java:666) at libcore.reflect.AnnotationAccess.toAnnotationInstance(AnnotationAccess.java:641) at libcore.reflect.AnnotationAccess.getDeclaredAnnotation(AnnotationAccess.java:170) at java.lang.reflect.Method.getAnnotation(Method.java:301) at […]

多次接收事件 – Greenrobot eventbus

我在我的应用程序中使用Greenrobot的EventBus,它运行正常。 但是,如果我按后退按钮关闭应用程序,然后立即重新启动应用程序我似乎收到了两次事件。 如果我再这样做,我将收到它三次,依此类推。 我正在检查日志和调试,看看我是否有任何类的多个实例,或者如果我多次注册,但我看不到任何额外的类,并且使用isRegistered返回false。 有任何想法吗? 谢谢

带有Fragments和EventBus的空指针exception

我已经通过各种方法使这个项目工作,并最终确定了Green Robot的EventBus。 我在这里的第二个问题是: – 多个片段到活动的沟通 。 我被带到那里的事件巴士路线。 我已经在适当的图书馆里闯入,我认为我非常接近使其成功。 我不断在包含的任何行中获得空指针exception eBus.post(Str); 我相当肯定,因为我没有正确注册eBus。 我知道Fragment没有这样的上下文,但我也尝试使用getActivity()也无济于事。 我在下面发布了MainActivity,CoreFragment和LogCat。 如果有人可以提供帮助,我将非常感激。 这已经持续了近一个月! import de.greenrobot.event.EventBus; import android.os.Bundle; import android.app.Activity; import android.util.Log; import android.view.Menu; import android.widget.EditText; public class MainActivity extends Activity { EditText editText1; String Txt; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); editText1 = (EditText) findViewById(R.id.editText1); Txt = “”; EventBus eBus = […]

事件总线片段取消注册

我有一个注册到事件总线的splashscreen Fragment: @Override public void onStart() { super.onStart(); EventBus.getDefault().register(this); } @Override public void onStop() { EventBus.getDefault().unregister(this); super.onStop(); } 如果屏幕进入自动锁定(或任何其他可以调用onStop的事件),则容器活动将进入onStop,并且该片段不再能够接收(网络)事件。 我正在考虑将 “取消注册”逻辑移动 到onDestroy方法。 这是个好主意吗?

Kotlin:我们可以在Kotlin中使用EventBus(GreenRobot)的@Subscribe吗?

我的onEvent在一个片段中,如下所示,在我的Kotlin函数中捕获活动的身份validation。 但是,我无法得到onEvent触发。 @Subscribe fun onEvent(event: AuthenticationEvent) { if (event.isAuthenticated) { startFragment(signInFragment, SignInFragment.TAG) } else { startFragment(signOutFragment, SignOutFragment.TAG) } } 在我的build.gradle文件中,我添加了这个 compile ‘org.greenrobot:eventbus:3.0.0’ 有什么我需要做的才能获得这个触发器吗?

Android事件总线不适用于两个事件侦听器

在我的Android应用程序中,我使用了Activity和Adapter作为列表视图,我的获取需要使用EventBus通过事件监听器来传递适配器类和活动,因此我创建了两个事件监听器类。 我的流程是: 1)我在活动中有一个按钮,按钮应该与Adapter类通信。 2)如果我单击文本视图(列表视图的文本视图小部件)应该通信Activity类。 通过以下代码,它适用于Adapter与Activity通信,但Activity不与适配器类通信。 请帮助我如何沟通这两个课程? 我已经发布了我的完整示例项目代码: 活动类: public class ListMobileActivity extends Activity {….}; private ListView list; private Button btn; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); EventBus.getDefault().register(ListMobileActivity.this); …… list.setAdapter(adapter); // Does not communicates with Adapter. btn.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { EventBus.getDefault().post(new TestEvent2(“test event”)); } }); } public void onEvent(TestFinishedEvent […]

使用GreenRobot事件总线的Android中的IPC

我需要使用(greenrobot)EventBus与远程服务进行通信。 不幸的是,它似乎不适用于IPC。 看看代码,我也没有看到解决方法。 任何帮助,将不胜感激 ! 奖金问题 – 是否还有支持IPC的其他EventBuses(适用于Android)?

EventBus – 永远不会使用@Subscribe注释方法

使用greenrobot EventBus库时,所有@Subscribe -annotated方法都以浅灰色显示,并显示警告方法onMyEvent()从未在Android Studio中使用。 有没有办法自动抑制此警告(因为该方法不是直接从代码调用,而是响应事件总线上的事件)?

Greenbot Eventbus 3.0:onEvent,onEventMainThread,onEventBackgroundThread和onEventAsync有什么区别?

我对Greenrobot的EventBus 3.0中的onEvent , onEventMainThread , onEventBackgroundThread和onEventAsync的使用有点困惑 从我在文档中看到的: onEvent与ThreadMode.POSTING (默认) onEventMainThread与onEventMainThread使用 onEventBackgroundThread与onEventBackgroundThread使用 onEventAsync与onEventAsync使用 但是在从后台线程发布事件的情况下: @Subscribe(threadMode = ThreadMode.MAIN) public void onEventMainThread(MyEvent event) { // some UI manipulation } 具有与以下完全相同的行为: @Subscribe(threadMode = ThreadMode.MAIN) public void onEvent(MyEvent event) { // some UI manipulation } 和: @Subscribe public void onEventMainThread(MyEvent event) { // some UI manipulation } 引发CalledFromWrongThreadException: Only the […]

事件总线和android ui组件的生命周期

我一直在寻找完美的Android应用程序架构,并阅读了一些关于此主题的精彩博文。 1) http://www.mdswanson.com/blog/2014/04/07/durable-android-rest-clients.html 2) http://birbit.com/a-recipe-for-writing-responsive-rest-clients-on-android/ 这两篇文章描述了如何利用事件总线在android组件(活动,片段,服务)之间进行通信。 一个但非常重要的主题没有涉及。 如何处理暂停时发布到UI组件的事件。 例如:服务是在完成将数据下载到活动时发布事件。 此时活动暂停。 由于事件总线在onPause()中未注册,我们完全失去了这个事件。 来自greendao的EvenBus提供stickyevents。 但如果不删除它们会导致内存泄漏。 来自square的Otto引入了“Producer”模式,可用于代替粘性事件。 如果未手动删除粘性事件,则第一种解决方案可能导致内存泄漏。 第二个需要将数据保存在某处,直到Producer方法将其返回给Subscribers。 这个解决方案似乎更正确,但需要编写更多代码。 任何人都可以分享如何解决这个边缘案例的想法? 有清洁的解决方案