2016-03-13 12 views
6

Ho iniziato a utilizzare Dagger2 per gestire le dipendenze e sto cercando di capire come utilizzare DI per fornire un singleton GoogleApiClient. Le motivazioni di questo sono:Come si fornisce una dipendenza di GoogleApiClient con Dagger2?

  • ridurre il codice boilerplate: molteplici attività & Frammenti richiedono un GoogleApiClient
  • migliorare testability: attualmente queste attività e frammenti non sono ben testati

voglio per fornire un Singleton GoogleApiClient nell'ambito dell'applicazione.

Come gestite i callback? Se si sceglie un auto-managed or manually-managed connection, ci sono alcuni callback e devono essere trattate:

  • GoogleApiClient.ConnectionCallbacks (manuale)
  • GoogleApiClient.OnConnectionFailedListener (entrambi)

risposta

3

È possibile utilizzare l'iniezione di crea il cliente

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

E quindi gestire i call back sulla tua attività

@Inject GoogleApiClient mGoogleApiClient; 



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

Spero che questo possa aiutarti.

+0

Sono 'onResume()' e 'onPause()' il luogo corretto per registrare/annullare la registrazione del listener? – sidecarcat

+0

Il metodo del provider di esempio crea il client (non solo il builder, come suggerito dal testo). – sidecarcat

+0

@sidecarcat Sì, hai ragione, fornisce il client. Normalmente la disconnessione viene richiamata su onStop() e on Start è possibile chiamare Connetti –

Problemi correlati