studio services play guides googleapiclient google gms developers dependency auth android google-api-client

services - Error al implementar GoogleApiClient Builder para el desarrollo de Android



googleapiclient python (5)

Veo en su documentación donde claramente le piden que incluya esta importación:

import com.google.android.gms.common.GooglePlayServicesClient.ConnectionCallbacks;

Sin embargo, el error que se arroja está esperando una clase diferente que GooglePlayServicesClient.ConnectionCallbacks , está pidiendo GoogleApiClient.ConnectionCallbacks . Intente cambiar sus implementos para usar el nombre de clase más calificado. Parece ser la única cosa posible al lanzar el código para un bucle y, sin el nombre de clase calificado explícitamente, se usará el nombre de clase directamente importado.

Siempre es más difícil cuando tienes que cuestionar el manual.

Editar: me refiero a un cambio como este:

public class MainActivity extends ActionBarActivity implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener {

Estoy siguiendo la documentación de Google para implementar la función de inicio de sesión de Google+ en una aplicación.

https://developers.google.com/+/mobile/android/getting-started

Seguí cada paso de acuerdo con la guía pero me quedé atrapado en un error generado por GoogleApiClient.Builder, busqué a fondo pero no obtuve ningún resultado. Por favor, ayúdame a solucionarlo. Gracias.

Código de error:

mGoogleApiClient = new GoogleApiClient.Builder(this) .addConnectionCallbacks(this) .addOnConnectionFailedListener(this).addApi(Plus.API, null) .addScope(Plus.SCOPE_PLUS_LOGIN).build();

Mensaje de error :

The method addConnectionCallbacks(GoogleApiClient.ConnectionCallbacks) in the type GoogleApiClient.Builder is not applicable for the arguments (MainActivity)

Código completo de MainActivity.java:

package mad.project.mightysatta; import android.content.Intent; import android.content.IntentSender.SendIntentException; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v7.app.ActionBarActivity; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import com.google.android.gms.common.ConnectionResult; import com.google.android.gms.common.GooglePlayServicesClient.ConnectionCallbacks; import com.google.android.gms.common.GooglePlayServicesClient.OnConnectionFailedListener; import com.google.android.gms.common.api.GoogleApiClient; import com.google.android.gms.plus.Plus; public class MainActivity extends ActionBarActivity implements ConnectionCallbacks, OnConnectionFailedListener { /* Request code used to invoke sign in user interactions. */ private static final int RC_SIGN_IN = 0; /* Client used to interact with Google APIs. */ private GoogleApiClient mGoogleApiClient; /* * A flag indicating that a PendingIntent is in progress and prevents us * from starting further intents. */ private boolean mIntentInProgress; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mGoogleApiClient = new GoogleApiClient.Builder(this) .addConnectionCallbacks(this) .addOnConnectionFailedListener(this).addApi(Plus.API, null) .addScope(Plus.SCOPE_PLUS_LOGIN).build(); setContentView(R.layout.activity_main); if (savedInstanceState == null) { getSupportFragmentManager().beginTransaction() .add(R.id.container, new PlaceholderFragment()).commit(); } } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. // getMenuInflater().inflate(R.menu.main, menu); MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.main_activity_actions, menu); return super.onCreateOptionsMenu(menu); // return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } /** * A placeholder fragment containing a simple view. */ public static class PlaceholderFragment extends Fragment { public PlaceholderFragment() { } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.fragment_main, container, false); return rootView; } } @Override public void onConnectionFailed(ConnectionResult result) { // TODO Auto-generated method stub if (!mIntentInProgress && result.hasResolution()) { try { mIntentInProgress = true; result.startResolutionForResult(this, // your activity RC_SIGN_IN); } catch (SendIntentException e) { // The intent was canceled before it was sent. Return to the // default // state and attempt to connect to get an updated // ConnectionResult. mIntentInProgress = false; mGoogleApiClient.connect(); } } } @Override public void onConnected(Bundle connectionHint) { // TODO Auto-generated method stub } @Override public void onDisconnected() { // TODO Auto-generated method stub } protected void onStart() { super.onStart(); mGoogleApiClient.connect(); } protected void onStop() { super.onStop(); if (mGoogleApiClient.isConnected()) { mGoogleApiClient.disconnect(); } } protected void onActivityResult(int requestCode, int responseCode, Intent intent) { if (requestCode == RC_SIGN_IN) { mIntentInProgress = false; if (!mGoogleApiClient.isConnecting()) { mGoogleApiClient.connect(); } } } public void onConnectionSuspended(int cause) { mGoogleApiClient.connect(); } }

En este código si hago un comentario de .addConnectionCallbacks y .addOnConnectionFailedListener, el error desaparece. El error parece estar relacionado con sus argumentos.

mGoogleApiClient = new GoogleApiClient.Builder(this) // .addConnectionCallbacks(this) // .addOnConnectionFailedListener(this) .addApi(Plus.API, null) .addScope(Plus.SCOPE_PLUS_LOGIN).build();

Actividad principal actualizada, después de reemplazar los implementos a

GooglePlayServicesClient.ConnectionCallbacks, GooglePlayServicesClient.OnConnectionFailedListener

MainActivity.java (Actualizado)

package mad.project.mightysatta; import android.content.Intent; import android.content.IntentSender.SendIntentException; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v7.app.ActionBarActivity; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import com.google.android.gms.common.ConnectionResult; import com.google.android.gms.common.GooglePlayServicesClient; import com.google.android.gms.common.GooglePlayServicesClient.ConnectionCallbacks; import com.google.android.gms.common.GooglePlayServicesClient.OnConnectionFailedListener; import com.google.android.gms.common.api.GoogleApiClient; import com.google.android.gms.plus.Plus; public class MainActivity extends ActionBarActivity implements GooglePlayServicesClient.ConnectionCallbacks, GooglePlayServicesClient.OnConnectionFailedListener { /* Request code used to invoke sign in user interactions. */ private static final int RC_SIGN_IN = 0; /* Client used to interact with Google APIs. */ private GoogleApiClient mGoogleApiClient; /* * A flag indicating that a PendingIntent is in progress and prevents us * from starting further intents. */ private boolean mIntentInProgress; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mGoogleApiClient = new GoogleApiClient.Builder(this) .addConnectionCallbacks(this) .addOnConnectionFailedListener(this) .addApi(Plus.API, null) .addScope(Plus.SCOPE_PLUS_LOGIN).build(); setContentView(R.layout.activity_main); if (savedInstanceState == null) { getSupportFragmentManager().beginTransaction() .add(R.id.container, new PlaceholderFragment()).commit(); } } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. // getMenuInflater().inflate(R.menu.main, menu); MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.main_activity_actions, menu); return super.onCreateOptionsMenu(menu); // return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } /** * A placeholder fragment containing a simple view. */ public static class PlaceholderFragment extends Fragment { public PlaceholderFragment() { } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.fragment_main, container, false); return rootView; } } @Override public void onConnectionFailed(ConnectionResult result) { // TODO Auto-generated method stub if (!mIntentInProgress && result.hasResolution()) { try { mIntentInProgress = true; result.startResolutionForResult(this, // your activity RC_SIGN_IN); } catch (SendIntentException e) { // The intent was canceled before it was sent. Return to // default // state and attempt to connect to get an updated // ConnectionResult. mIntentInProgress = false; mGoogleApiClient.connect(); } } } @Override public void onConnected(Bundle connectionHint) { // TODO Auto-generated method stub } @Override public void onDisconnected() { // TODO Auto-generated method stub } protected void onStart() { super.onStart(); mGoogleApiClient.connect(); } protected void onStop() { super.onStop(); if (mGoogleApiClient.isConnected()) { mGoogleApiClient.disconnect(); } } protected void onActivityResult(int requestCode, int responseCode, Intent intent) { if (requestCode == RC_SIGN_IN) { mIntentInProgress = false; if (!mGoogleApiClient.isConnecting()) { mGoogleApiClient.connect(); } } } public void onConnectionSuspended(int cause) { mGoogleApiClient.connect(); } }


Yo también enfrenté el mismo problema, lo resolví haciendo las siguientes cosas.

importar los ConnectionCallbacks correctos.

aquí está mi código:

import android.content.Context; import android.os.Bundle; import com.google.android.gms.common.ConnectionResult; import com.google.android.gms.common.api.GoogleApiClient; import com.google.android.gms.drive.Drive; public class GplusLogin implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener { GoogleApiClient mGoogleApiClient; GplusLogin(Context context){ mGoogleApiClient = new GoogleApiClient.Builder(context) .addApi(Drive.API) .addScope(Drive.SCOPE_FILE) .addConnectionCallbacks((GoogleApiClient.ConnectionCallbacks) context) .addOnConnectionFailedListener(this) .build(); } @Override public void onConnected(Bundle bundle) { } @Override public void onConnectionFailed(ConnectionResult connectionResult) { } @Override public void onConnectionSuspended(int i) { } }


haga clic en alt enter y fuerce a android studio para implementar:

GoogleApiClient.ConnectionCallbacks,

GoogleApiClient.OnConnectionFailedListener


resulta que ellos (google) no siguen mucho de la guía ellos mismos. Utilice su Google Drive Android QuickStart como referencia, que en realidad mencionan en la parte superior del tutorial, pero le dan el nombre engañoso de "Android Quickstart", aunque es específico de Google Drive.

La nota en la parte superior de la guía :


implements LocationListener, GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener,OnMapReadyCallback

a la Actividad