2016-09-15 31 views
4

我已經有了這個問題,因爲我切換到EventBus(同樣會發生在任何總線庫)凡凡我想執行一個動作時,視圖沒有準備好,那麼我會得到的錯誤公交車沒有登記;每當視圖尚未啓動時使用總線?

E/EventBus: Could not dispatch event: class com.android.greenfield.Action to subscribing class class com.android.greenfield.GreenStore 

時,我想火在生命週期的那些部分的動作它發生:當我需要圖片/視頻

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    actionsCreator.uploadFile(filepath, "image/jpg"); 
    // ... (Error here because the bus isn't yet registered) 
} 

還是這裏的時候,我收到一個NFC TAG

@Override 
public void onNewIntent(Intent intent) { 
    actionsCreator.uploadNfcTag(intent); 
    // ... (Error here because the bus isn't yet registered) 
} 

如果我按照正常方式或EventBus因爲他們在自己的文檔說,我應該registerunregister這樣:

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

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

我發現的唯一的解決方法到目前爲止被註冊和取消註冊時,我想要執行的操作是在onStart()onStop()生命週期之間......但它的髒,我覺得不好

@Override 
public void onNewIntent(Intent intent) { 
    dispatcher.register(GreenStore); 
    actionsCreator.uplaodNfcTag(intent); 
    dispatcher.register(GreenStore); 
} 
+1

你可能想看看 –

+0

難道我粘的事件必須手動處理這些事件或者是我註冊後自動發送?我應該如何處理這種情況? – Jaythaking

+0

您不需要在巴士上註冊即可在巴士上發佈信息。您是否正在使用事件總線在單個活動中路由消息?如果是的話,爲什麼? – CommonsWare

回答

1

這是同樣的問題,爲什麼ÿ如果您試圖在onActivityResult中顯示對話框片段,您會收到IllegalStateException。簡而言之,它在用戶界面恢復正常之前運行。

簡單的解決方案:

1)

Handler handler = new Handler(Looper.getMainLooper()); 
handler.post(new Runnable() { 
    @Override 
    public void run() { 
     actionsCreator.uploadFile(filepath, "image/jpg"); 
    } 
}); 

2)while the bus is paused (this is something you'd handle manually), you should queue up the events, and then when it's unpaused, execute them.

+0

但是我不明白爲什麼事件總線與視圖具有相同的生命週期?如果視圖尚未準備好,爲什麼我無法與其他服務進行通信? – Jaythaking

相關問題