Ошибка внедрения GoogleApiClient Builder для разработки Android

Я следую документации Google, чтобы внедрить функцию входа в Google+ в приложение.

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

Я следовал за каждым шагом в соответствии с руководством, но застрял в ошибке, сгенерированной GoogleApiClient.Builder, я тщательно искал, но не получил никакого результата. Пожалуйста, помогите мне разобраться. Спасибо.

Код ошибки:

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

Сообщение об ошибке :

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

Полный код 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(); } } 

В этом коде, если я комментирую .addConnectionCallbacks и .addOnConnectionFailedListener, ошибка исчезает. Ошибка, похоже, связана с их аргументами.

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

Обновленная основная деятельность, после замены

  GooglePlayServicesClient.ConnectionCallbacks, GooglePlayServicesClient.OnConnectionFailedListener 

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; 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(); } } 

Solutions Collecting From Web of "Ошибка внедрения GoogleApiClient Builder для разработки Android"

Я вижу в своей документации, где они четко инструктируют вас включить этот импорт:

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

Тем не менее, ошибка, которую бросает, ожидает другого класса, чем GooglePlayServicesClient.ConnectionCallbacks , он просит GoogleApiClient.ConnectionCallbacks . Попробуйте изменить свои инструменты, чтобы использовать более квалифицированное имя класса. Кажется, что единственная возможная вещь, бросающая код цикла и без явного квалифицированного имени класса, по умолчанию будет иметь прямо импортированное имя класса.

Это всегда сложнее, когда вам приходится подвергать сомнению руководство.

Изменить: Я имею в виду такое изменение:

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

Я тоже столкнулся с той же проблемой, и решил, выполнив следующие действия.

Импортируйте нужные ConnectionCallbacks.

Вот мой код:

 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) { } } 

Оказывается, они (google) не следуют за самим руководством. Используйте их Quickstart на Google Диске Android в качестве справочной информации, которую они на самом деле упоминают в начале учебника, но они дают ему вводящее в заблуждение имя «Android Quickstart», даже если оно характерно для Google Диска

Примечание в верхней части руководства : Примечание в верхней части руководства

Нажмите alt enter и запустите студию Android для реализации:

GoogleApiClient.ConnectionCallbacks,

GoogleApiClient.OnConnectionFailedListener

Попробуйте реализовать GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener. В вашем коде это GooglePlayServicesClient.ConnectionCallbacks