2014-07-16 87 views
1

我使用Facebook和Google+ API爲我的第一個(登錄)活動創建登錄按鈕。我只是按照開發人員頁面上的教程進行操作並將它們一起實施。 Facebook按鈕工作正常,但沒有任何反應,當我點擊谷歌+按鈕。我究竟做錯了什麼?谷歌登錄按鈕沒有發生

代碼:

登錄活動:上點擊谷歌+按鈕

import android.content.Intent; 
import android.content.IntentSender.SendIntentException; 
import android.os.Bundle; 
import android.support.v4.app.FragmentActivity; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Toast; 

import com.google.android.gms.common.ConnectionResult; 
import com.google.android.gms.common.api.GoogleApiClient; 
import com.google.android.gms.plus.Plus; 

public class LoginActivity extends FragmentActivity implements GoogleApiClient.ConnectionCallbacks,GoogleApiClient.OnConnectionFailedListener, OnClickListener { 

private static String APP_ID="685980371496839";  //for facebook 

/* 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; 

    /* Track whether the sign-in button has been clicked so that we know to resolve 
    * all issues preventing sign-in without waiting. 
    */ 
    private boolean mSignInClicked; 

    /* Store the connection result from onConnectionFailed callbacks so that we can 
    * resolve them when the user clicks sign-in. 
    */ 
    private ConnectionResult mConnectionResult; 



FacebookFragment facebookFragment; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    //setContentView(R.layout.activity_login); 
    //findViewById(R.id.sign_in_button).setOnClickListener(this); 
    if (savedInstanceState == null) 
    { 
     // Add the fragment on initial activity setup 
     facebookFragment = new FacebookFragment(); 
     getSupportFragmentManager().beginTransaction().add(android.R.id.content, facebookFragment).commit(); 
    } 
    else 
    { 
     // Or set the fragment from restored state info 
     facebookFragment = (FacebookFragment) getSupportFragmentManager().findFragmentById(android.R.id.content); 
    } 


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

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.login, 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); 
} 

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

protected void onStop() { 
    super.onStop(); 

    if (mGoogleApiClient.isConnected()) { 
     mGoogleApiClient.disconnect(); 
    } 
    } 

@Override 
public void onConnectionFailed(ConnectionResult result) { 
    // TODO Auto-generated method stub 

    if (!mIntentInProgress) { 
     // Store the ConnectionResult so that we can use it later when the user clicks 
     // 'sign-in'. 
     mConnectionResult = result; 

     if (mSignInClicked) { 
      // The user has already clicked 'sign-in' so we attempt to resolve all 
      // errors until the user is signed in, or they cancel. 
      resolveSignInError(); 
     } 
     } 

} 

@Override 
public void onConnected(Bundle arg0) { 
    // TODO Auto-generated method stub 
    mSignInClicked = false; 
     Toast.makeText(this, "User is connected!", Toast.LENGTH_LONG).show(); 
} 

public void onDisconnected() { 
    // TODO Auto-generated method stub 

} 

protected void onActivityResult(int requestCode, int responseCode, Intent intent) { 
    if (requestCode == RC_SIGN_IN) { 
     if (responseCode != RESULT_OK) { 
      mSignInClicked = false; 
     } 

     mIntentInProgress = false; 

     if (!mGoogleApiClient.isConnecting()) { 
      mGoogleApiClient.connect(); 
     } 
     } 
    } 

public void onConnectionSuspended(int cause) { 
     mGoogleApiClient.connect(); 
    } 

public void onClick(View view) { 
     if (view.getId() == R.id.sign_in_button 
     && !mGoogleApiClient.isConnecting()) { 
     mSignInClicked = true; 
     resolveSignInError(); 
     } 
    } 

private void resolveSignInError() { 
     if (mConnectionResult.hasResolution()) { 
     try { 
      mIntentInProgress = true; 
      //startIntentSenderForResult(mConnectionResult.getIntentSender(),RC_SIGN_IN, null, 0, 0, 0); 
      mConnectionResult.startResolutionForResult(this,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(); 
     } 
     } 
    } 


} 

logcat的:

07-16 08:35:30.580: E/SoundPool(1270): error loading /system/media/audio/ui/Effect_Tick.ogg 
07-16 08:35:30.580: W/AudioService(1270): Soundpool could not load file: /system/media/audio/ui/Effect_Tick.ogg 
07-16 08:35:30.580: E/SoundPool(1270): error loading /system/media/audio/ui/Effect_Tick.ogg 
07-16 08:35:30.580: W/AudioService(1270): Soundpool could not load file: /system/media/audio/ui/Effect_Tick.ogg 
07-16 08:35:30.590: E/SoundPool(1270): error loading /system/media/audio/ui/Effect_Tick.ogg 
07-16 08:35:30.590: W/AudioService(1270): Soundpool could not load file: /system/media/audio/ui/Effect_Tick.ogg 
07-16 08:35:30.590: E/SoundPool(1270): error loading /system/media/audio/ui/Effect_Tick.ogg 
07-16 08:35:30.590: W/AudioService(1270): Soundpool could not load file: /system/media/audio/ui/Effect_Tick.ogg 
07-16 08:35:30.590: E/SoundPool(1270): error loading /system/media/audio/ui/Effect_Tick.ogg 
07-16 08:35:30.590: W/AudioService(1270): Soundpool could not load file: /system/media/audio/ui/Effect_Tick.ogg 
07-16 08:35:30.590: E/SoundPool(1270): error loading /system/media/audio/ui/KeypressStandard.ogg 
07-16 08:35:30.590: W/AudioService(1270): Soundpool could not load file: /system/media/audio/ui/KeypressStandard.ogg 
07-16 08:35:30.590: E/SoundPool(1270): error loading /system/media/audio/ui/KeypressSpacebar.ogg 
07-16 08:35:30.590: W/AudioService(1270): Soundpool could not load file: /system/media/audio/ui/KeypressSpacebar.ogg 
07-16 08:35:30.590: E/SoundPool(1270): error loading /system/media/audio/ui/KeypressDelete.ogg 
07-16 08:35:30.590: W/AudioService(1270): Soundpool could not load file: /system/media/audio/ui/KeypressDelete.ogg 
07-16 08:35:30.590: E/SoundPool(1270): error loading /system/media/audio/ui/KeypressReturn.ogg 
07-16 08:35:30.590: W/AudioService(1270): Soundpool could not load file: /system/media/audio/ui/KeypressReturn.ogg 
07-16 08:35:30.590: E/SoundPool(1270): error loading  /system/media/audio/ui/KeypressInvalid.ogg 
07-16 08:35:30.590: W/AudioService(1270): Soundpool could not load file: /system/media/audio/ui/KeypressInvalid.ogg 
07-16 08:35:30.590: W/AudioService(1270): onLoadSoundEffects(), Error -1 while loading samples 

回答

1

我建議你顯示錯誤消息,如果hasResolution()方法從mConnectionResult失敗,這導致我解決了這個問題,在我的情況下,這是由於谷歌播放服務版本之間的兼容性問題。所以,你會得到什麼可以改變你的resolveSignInErrors以下是想錯了一個更詳細的答覆:

private void resolveSigInErrors() { 
    if(mConnectionResult.hasResolution()){ 

     try { 
      startIntentSenderForResult(mConnectionResult.getResolution().getIntentSender(),RC_SIGN_IN,null,0,0,0); 
     } catch (IntentSender.SendIntentException e) { 
      e.printStackTrace(); 
      mGoogleApliClient.connect(); 
     } 
    } 
    else { 
     // Show dialog using GooglePlayServicesUtil.getErrorDialog() 
     GooglePlayServicesUtil.showErrorDialogFragment(mConnectionResult.getErrorCode(),this,RC_SIGN_IN); 

    } 
} 

這將打印Play業務是什麼地方出了問題由谷歌提供了一個特殊的視圖,它可以甚至可以幫助你解決錯誤。

+0

這對我有很大的幫助。謝謝! PS:你知道爲什麼我有時會得到「錯誤登錄指定的帳戶...」嗎?我只轉向了一臺新電腦。 – SlashG