問題タブ [greenrobot-eventbus]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
0 に答える
110 参照

java - Android : サービスからの GUI の更新

私は何をしたいですか?

私はAndroidでサービスを使用することを楽しみにしています.GUIを更新し、サービスからデータベースも使用したいと考えています。というライブラリがあることを知りましたEVENTBUS by greenrobotが、安全に使用できるかどうかわかりません。

なぜ私が欲しいのですか?

実際には、バックグラウンドで実行されているサービスがすべてのデータ関連の作業を行い、バックグラウンドのみを担当し、すべてのフラグメントがサービスのイベントとサービスにのみ対応するように、Android のコードを記述したいと考えHTTP callsDatabase updatesubscribesますpublish。何らかのイベントが発生したとき。方法でコードを書きたいPub-Sub

これを行うことで、good separation between logic and GUI関連する作業を達成できます。また、すべてのデータ関連の作業をおよび GUI でフラグメントのみでre-usability of the code 定義することで、 を実現できます。services

そのため、サービスから使用できるものを探していpub-sub libraryます。

0 投票する
1 に答える
739 参照

android - Android EventBus - hasSubscriberForEvent() は常に false を返す

私が理解しているように、hasSubscriberForEvent(Class<?> eventClass)this で Event をリッスンしている場合、 EventBus のメソッドは true を返す必要がありますeventClass。しかし、それは常に false を返します。理由はわかりません。

私のフラグメントでは、EventBus を登録および登録解除し、Post をリッスンするメソッドを宣言します。

私のサービスでは、この Fragment が表示されているかどうかを確認する必要があります.1つの方法は、EventBus.getDefault().hasSubscriberForEvent(MyFragment.class). EventBusMyFragmentが何か登録されていることを確認した場合は true を返し、それ以外の場合は false を返すと予想していました。

何か足りないのでしょうか、それともhasSubscriberForEvent()このように動作しませんか?

注:イベントが発生しEventBus.getDefault().post(new MyDummyObject());た場合、EventBus が正常に登録および登録解除されていると想定します。

0 投票する
1 に答える
331 参照

android - EventBus: 追跡する方法は?

フラグメントとアクティビティ間の通信にイベント バス(greenrobot) を使用しています。よく働く。

しかし、私が疑問に思っていたことの 1 つは、これらがどこで発射されたかをどのように追跡しているのかということです。

例:onEvent()どこかでメソッドを見つけた場合、これが起動される場所を見つけるにはどうすればよいですか?

0 投票する
0 に答える
98 参照

android - 進行状況ダイアログを閉じると、Genymotion エミュレーターでは機能しますが、実際のデバイスでは機能しません

バックグラウンド操作の実行中に進行状況ダイアログを表示しています。Eventbus を使用して、ダイアログを表示しているフラグメントにポストバックしています。ダイアログへの参照を保持するために変数を使用しています。Genymotion エミュレーターを使用してこのプログラムをテストすると、完全に動作します。実際のデバイスでテストすると、変数は null になります。

最初に、ユーザーに 4 桁のコードを入力するダイアログが表示されます。[OK] をクリックすると、4 桁のコードが処理され (非同期)、ProgressDialog(mAuthorizeProgress) が表示されます。

ユーザーが [OK] をクリックすると、進行状況ダイアログが表示されます。

これは、進行状況ダイアログを表示する関数です。

却下コードのスニペットを次に示します。

実際のデバイスからのログは次のとおりです。

エミュレータからのログは次のとおりです。

もちろん、プログレス ダイアログはエミュレータでは閉じられますが、実際のデバイスでは閉じられません。

私は完全に途方に暮れています。この問題をデバッグする方法についてアドバイスをいただければ幸いです。

0 投票する
2 に答える
590 参照

android - EventBus が間違ったアクティビティにイベントを配信するのを防ぐ方法

アプリに A、B、C の 3 つのアクティビティがあるとします。ここで説明するように、A のみが EventBus に登録され、ここで説明されているようonStart()に登録解除され、イベント X の受信時にユーザーを C にナビゲートするイベント ハンドラー メソッドがあります。onStop()onEvent(X event){...}

ただし、以下の不幸なシナリオを参照してください。

  1. ユーザーが A を起動します。
  2. ユーザーが A でバックグラウンド操作を開始します。
  3. ユーザーは、バックグラウンド操作が完了するのを待たずに、A のボタンをタップして B に移動します。A は EventBus から登録解除されます。
  4. ユーザーは A に戻ります。A は再度 EventBus に登録されます。
  5. ユーザーが B に移動する前に要求されたバックグラウンド操作が完了すると、バックグラウンドからイベント X が発生します。
  6. イベント X は A に配信され、イベント ハンドラー ( onEvent(X event){...}) はユーザーをすぐにアクティビティ C に移動します。

これは奇妙なユーザー エクスペリエンスです。イベントが再登録されたときにイベントが A に配信されないようにするにはどうすればよいでしょうか?

1 つの解決策は、 で進行中のバックグラウンド操作をキャンセルしonStop()て、イベントが発生しないようにすることです。ただし、バックグラウンド操作をキャンセルできない場合があります。

GreenRobot の EventBus を使用しています。

0 投票する
2 に答える
719 参照

android-annotations - AndroidAnnotations - 依存関係を追加せずに Singleton EBean を作成する

私はAndroid プロジェクトでandroidannotationsを使用しており、EBean を次のように定義しています。

この Bean は、最初に必要になったとき、つまり次の場合に作成されます。

とあるクラスで。このプロジェクトでもEventBusを使用しMyBeanてい@Subscriberます。EventのインスタンスがMyBean存在しないため(どこにも依存関係がないため) 、この関数は呼び出されません(が投稿されたとき)。MyBean依存関係を特にどこにも追加せずにインスタンスを作成するにはどうすればよいですか?

私の一時的な解決策は、単純に Application クラスで Bean を定義することです。

0 投票する
4 に答える
6726 参照

android - Greenrobot EventBus と Guava の EventBus の違い

私はgreenrobotのEventBusをかなり頻繁に使用しています

https://github.com/greenrobot/EventBus

しかし、Guava には独自の EventBus があることに気付きました

com.google.common.eventbus.EventBus

大きな違いがあるかどうか誰かが知っていますか?

0 投票する
1 に答える
4981 参照

java - GreenRobot のイベントバスは注釈を表示できません。「パブリック メソッドはありません」

そこで、Green Robots のイベントバス モジュールを知りました。このページの指示に従って、動作させようとしました: http://greenrobot.org/eventbus/documentation/how-to-get-started/

十分に単純に思えます。

適切なコードを入力しましたが、デバイスで実行するとクラッシュします。

クラスの最初の数行は次のようになります。

/どうやら/注釈はそこにあります。コンパイルは警告なしで行われます。Gradleファイルで指定されているバージョン3.0.0を使用しています...

では、何が間違っているのでしょうか?(RTFM はありがたく受け入れました。関連する記事を含む FM の場所を教えてください。)

ありがとう!

-ケン