2016-05-16 5 views
0

In meiner Anwendung veröffentlichen, gebe ich einen job in die job-queue und in meinem Job Queue, habe ich meine registriert EventBus und ich versuche, das Ereignis mit den Hoffnungen auf post, dass mein subscriber Verfahren erhalten würde es. Ich habe gerade vor kurzem migriert von Otto'sEventBus und während dieser Weise vorher gearbeitet hatte, es funktioniert nicht für greenrobots EventBus 3.Greenrobot EventBus3 nicht an meine Abonnenten

Hier ist ein Beispielfall für das, was ich versuche zu erreichen:

TestPresenterImpl.class (Diese Klasse wurde die TestActivity.class) instanziiert

@Override 
public void addJob(JobData jobData) { 
    jobManager.addJobInBackground(new SendUpdateJob(jobData)); 
} 

@Subscribe 
@Override 
public void onUpdate(JobAddedEvent event) { 
    if (event.getStatus() == 1) { 
     Log.i(LOG_TAG, "test"); 
    } 
} 

@Override 
public void onStart() { 
    mBus.getDefault().register(this); 
} 

@Override 
public void onStop() { 
    mBus.getDefault().unregister(this); 
} 

SendUpdateJob.class (Dies ist die Klasse, die die Jobs in der Warteschlange der android-Priorität-Auftragswarteschlange zuvor von Pfad beibehalten mit Griffen)

Normalerweise funktioniert das auf Otto, aber da dies ein bisschen anders ist, möchte ich wissen, was ich falsch mache. Der Fehler, den ich bekomme, ist: ... "SendJobUpdate and its super classes have no public methods with the @Subscribe annotation". Mache ich hier etwas falsch?

Ich habe auch dafür gesorgt, dass ich import org.greenrobot.eventbus.Subscribe; importiere, weil ich bemerkt habe, dass andere darauf hingewiesen haben, dass sie googles subscribe importiert haben.

Antwort

1

Ihre EventBus.getDefault().register(this); sollte Ihrer Aktivität folgen, die Ihre @Subscribe Methode ist, nicht in mBus.getDefault().post(event); Aktivität.

FirstActicity

public class FirstActicity extends AppCompatActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_home); 
    //register should in this activity 
    EventBus.getDefault().register(this); 
} 

@Subscribe(threadMode = ThreadMode.MainThread) 
public void onEvent(MessageEvent event) { 
    //eventbus notify 
    Log.i("2hh", "main --- eventbus ---- updatedata"); 
    queryData(); 
} 

@Override 
protected void onDestroy() { 
    if (EventBus.getDefault().isRegistered(this)) { 
     EventBus.getDefault().unregister(this); 
    } 
} 

SecondActivity (Sie in dieser Tätigkeit nicht registrieren beacuse Sie keine @Subscribe Methode hava hat)

public class SecondActivity extends AppCompatActivity implements{ 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_add); 

    EventBus.getDefault().post(new MessageEvent("updateData")); 


} 

}

+0

ich bearbeitet vorgelegt Ihre Antwort zu formatieren besser und konzentrieren sich auf den nützlichen Teil. Möchten Sie den Code in Ihrem Bild kopieren und einfügen, anstatt ein Bild zu verwenden? Es ist einfacher zu lesen, zu suchen und zu verhindern, dass die Verbindung schlecht wird. – Noumenon

+1

Ok, tut mir leid, ich bin eine grüne Handi dachte nicht darüber nach, ich werde meine Antwort bald ändern, danke für Ihren Rat. – ZeroNight

Verwandte Themen