【问题标题】:How do you provide a GoogleApiClient dependency with Dagger2?你如何为 Dagger2 提供 GoogleApiClient 依赖项?
【发布时间】:2016-03-13 16:42:06
【问题描述】:

我已经开始使用 Dagger2 来管理依赖项,并且我正在尝试了解如何使用 DI 来提供单例 GoogleApiClient。这样做的动机是:

  • 减少样板代码:多个活动和片段需要 GoogleApiClient
  • 提高可测试性:目前这些活动和片段没有经过很好的测试

我想在 Application 范围内提供 Singleton GoogleApiClient。

你如何处理回调?无论你选择auto-managed or manually-managed connection,都有一些回调是必须处理的:

  • GoogleApiClient.ConnectionCallbacks(仅限手动)
  • GoogleApiClient.OnConnectionFailedListener(两者)

【问题讨论】:

    标签: dagger-2 android-googleapiclient


    【解决方案1】:

    你可以使用注入来创建客户端

     @Provides
        @Singleton
        GoogleApiClient providesGoogleApiClient(Context context) {
                return new GoogleApiClient.Builder(context)
                        .addApi(Places.GEO_DATA_API)
                        .addApi(LocationServices.API)
                        .build();
            }
    

    然后管理您活动的回调

    @Inject GoogleApiClient mGoogleApiClient;
    
    
    
    if (mGoogleApiClient != null) {  mGoogleApiClient.registerConnectionCallbacks(this);            mGoogleApiClient.registerConnectionFailedListener`(this);
    }
    

    希望对你有所帮助。

    【讨论】:

    • onResume()onPause() 是注册/注销监听器的正确位置吗?
    • 您的示例提供程序方法创建了客户端(不仅仅是构建器,正如您的措辞所暗示的那样)。
    • @sidecarcat 是的,你是对的,它提供了客户端。断开连接通常在 onStop() 和 onStart 上调用,您可以调用 connect
    • 只是想补充一点,如果你不想避免样板 onStart/onStop 你可以传递生命周期 ApiClient 包装器并让它在那里处理。
    • googleApiClient 未初始化,有什么想法吗?
    猜你喜欢
    • 1970-01-01
    • 2022-12-10
    • 2016-03-05
    • 1970-01-01
    • 2023-03-25
    • 2016-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多