如何使用Dagger2提供GoogleApiClient依赖?

7
我开始使用Dagger2来管理依赖项,我正在尝试了解如何使用DI提供单例GoogleApiClient。这样做的动机是:
  • 减少样板代码:多个Activity和Fragment需要GoogleApiClient
  • 提高可测试性:目前这些Activity和Fragment测试不够充分
我想在Application作用域下提供Singleton GoogleApiClient。 如何处理回调?无论您选择自动管理或手动管理连接,都必须处理一些回调:
  • GoogleApiClient.ConnectionCallbacks(仅手动)
  • GoogleApiClient.OnConnectionFailedListener(两者)
1个回答

7
您可以使用注入来创建客户端。
 @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
你的示例 provider 方法创建了客户端(不只是建造者,如你的措辞所示)。 - sidecarcat
@sidecarcat 是的,你说得对,它提供了客户端。断开连接通常在onStop()方法中执行,在onStart()方法中可以调用connect()方法。 - george_mx
只想补充一下,如果你想避免编写重复的 onStart/onStop 代码,你可以直接传递生命周期 ApiClient 包装器并在那里处理它。 - TheLibrarian
我得到了googleApiClient未初始化的错误,有什么想法吗? - Pedro Varela

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接