1

アクティビティと場所を使用するGWTMVPアプリケーションがあります。これは、明らかにThomas Broyerの作品の一部に基づいた、Mauro Bertapelleのサンプル(このスレッド内)に触発されています。

問題は次のとおりです。LoginActivityにRPC呼び出しを行わせ、ログインが成功するとユーザーを返します。このユーザーには役割があります(例:管理者、通常のユーザー、ゲスト)。NavigatorViewを含むいくつかのビューとアクティビティは、表示または実行する内容をこの役割に依存しています。このユーザーインスタンスを他のアクティビティに移動するにはどうすればよいですか?

私はClientFactoryを持っていません。インジェクション(Gin)は、アクティビティ/プレゼンターを提供するActivityProviderのビューをインスタンス化するために使用され、ActivityProviderはActivityMapperにインジェクトされます。したがって、これはGinの質問に還元される可能性があります。必要な場所でユーザー参照を取得するにはどうすればよいですか?これは、MVPのグローバル参照に関するこのSOの質問に似ているようです。

私をジン初心者と考えてください、これはそれを使用する私の最初の試みです。これを実現するための「Ginの方法」があると思いますが、これを行うための最良の方法を知るのに十分なGinの知識はありません(Ginを使用する必要がある場合)。

どうもありがとう。

編集1: SOで同様の質問を検索するために最善を尽くしたにもかかわらず、私はこの質問を見つけました。これは私のものとほとんど同じです(「関連」リンクを検索するためのSOアルゴリズムは検索よりも優れていますか?)。デビッドのジンの答えは正しい方向に進んでいると思います。

EventBusソリューションは可能ではないと思います。プレイスが変更されるたびにアクティビティをインスタンス化するというGoogleのガイドラインに従っているため、1つのイベントだけでは不十分です。

4

2 に答える 2

3

私がGuiceを使用してサーバー側で使用していて、クライアント側でも同様に機能するものは、カスタムプロバイダーにバインドすることです。ただし、あなたの場合は、プロバイダーをシングルトンにして、RPCコールバックから値をプッシュする必要があります(コンテキストからプルするのではありません)。最初に特定のプロバイダーが必要です。

@Singleton
public class CurrentUserProvider implements Provider<User> {
  private User currentUser;

  public User get() { return currentUser; }
  public void setCurrentValue(User currentUser) {
    this.currentUser = currentUser;
  }
}

Userプロバイダーにバインドしbind(User.class).toProvider(CurrentUserProvider.class) ます。RPCコールバックで注入するCurrentUserProviderので、実装の詳細として保持するために注入するsetCurrentValue他のすべての場所で実行できます。非常に短命のオブジェクトの場合、。ではなく値を直接挿入できます。Provider<User>CurrentUserProviderUserProvider<User>

値の変更をオブジェクトに通知する必要がある場合は、グローバルイベントバスでイベントをディスパッチできます。

または、常に具象CurrentUserProvider型を使用して(これ以上実装する必要はありProviderません)HasValueChangeHandlers、イベントバスではなくリスナーを登録できるようにすることもできます(ただし、後でクリーンアップする必要があります)。アクティビティ」onStoponCancelメモリリークを回避するために、イベントバスにハンドラーを登録すると自動的に処理されますonStart)。

(あなたが私に尋ねるなら、私は可能な限りアプリ内からの認証をやめたいです)

于 2011-04-30T11:09:20.903 に答える