web-dev-qa-db-fra.com

en utilisant enableAutoManage () dans un fragment

Existe-t-il un autre moyen de connecter le client Google API?

J'utilise des emplacements de saisie automatique et je dois utiliser ce code quelque part dans MYFRAGMENT

mGoogleApiClient = new GoogleApiClient.Builder(MainActivity.this)
                .addApi(Places.GEO_DATA_API)
                .enableAutoManage(this, GOOGLE_API_CLIENT_ID, this)
                .addConnectionCallbacks(this).build();

Mon problème avec

enableAutoManage(this, GOOGLE_API_CLIENT_ID, this)
                    .addConnectionCallbacks(this).build();

Je ne peux pas y faire face car quand je remplace this par getActivity() j'ai beaucoup de problèmes avec le casting

merci pour l'aide et désolé si cette question est idiote.

24
Hamza Dabjan

Si vous souhaitez utiliser enableAutoManage, vous devez étendre votre activité FragmentActivity. Les rappels qu'il effectue sont requis pour que la gestion automatique de GoogleApiClient fonctionne. La solution la plus simple consiste donc à ajouter extends FragmentActivity À votre activité. Ensuite, votre distribution n'échouerait pas et entraînerait le blocage de l'application au moment de l'exécution.

La solution alternative consiste à gérer le client api vous-même. Vous supprimeriez la ligne enableAutoManage du générateur et vous assurer vous-même connect/disconnect du client. L'endroit le plus courant pour ce faire est onStart()/onStop(). Quelque chose comme...

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    mGoogleApiClient = new GoogleApiClient.Builder(MainActivity.this)
            .addApi(Places.GEO_DATA_API)
            .addConnectionCallbacks(this).build();
}

@Override
protected void onStart() {
    super.onStart();
    mGoogleApiClient.connect();
}

@Override
protected void onStop() {
    super.onStop();
    mGoogleApiClient.disconnect();
}
61
Matthew Pape

Désolé pour la réponse tardive, mais plutôt que d'étendre FragmentActivity, vous pouvez étendre AppCompatActivity ...

public class YourActivity extends AppCompatActivity implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener 

.....

mCredentialsApiClient = new GoogleApiClient.Builder(context)
                    .addConnectionCallbacks(this)
                    .enableAutoManage(this,this)
                    .addApi(Auth.CREDENTIALS_API)
                    .build();
2
Shivam Mathur

Si votre fragment s'exécute dans une FragmentActivity ou AppCompatActivity, vous pouvez faire quelque chose comme ceci:

        mGoogleApiClient = new GoogleApiClient.Builder(getActivity())
            .enableAutoManage((FragmentActivity) getActivity() /* FragmentActivity */, new GoogleApiClient.OnConnectionFailedListener() {
                @Override
                public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
                    // your code here
                }
            })
            .addApi(Auth.GOOGLE_SIGN_IN_API, gso)
            .build();
1
Reid

Ma solution est similaire à la réponse acceptée, sauf que j'utilise la deuxième signature de Builder pour que connectionFailedListener soit également envoyée au constructeur.

Suivi de mGoogleApiClient.connect() et mGoogleApiClient.disconnect() dans onStart() et onStop() respectivement

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    mGoogleApiClient = new GoogleApiClient.Builder(this /*context*/ , this /*connectedListener*/, this /**connectionFailedListener/)
            .addApi(Places.GEO_DATA_API)
            .build();
}
0
Ajitsen