4

Accessing Google APIsのガイドにうまく従いました。

その後、コードの一部をフラグメントに移動することにしました。

スクリーンショット

<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <com.google.android.gms.common.SignInButton
        android:id="@+id/login_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:clickable="true"
        android:onClick="googleLogin" />

</FrameLayout>

MainActivity では、GoogleApiClient オブジェクトの作成onCreate()googleLogin()次のメソッドに移動しました。

public void googleLogin(View v) {
    mGoogleApiClient = new GoogleApiClient.Builder(this)
            .addConnectionCallbacks(this)
            .addOnConnectionFailedListener(this)
            .addApi(Plus.API)
            .addScope(Plus.SCOPE_PLUS_PROFILE)
            .build();

    mGoogleApiClient.connect();
}

ただし、メソッドが呼び出されることはありません(デバッガーで確認できるように)。

ここで何が問題なのですか? 現在のSignInButton実装のバグ ( onClickXML 属性を無視)ですか?

4

3 に答える 3

2

ボタンクリック前

         mGoogleApiClient = new GoogleApiClient.Builder(this)
                    .addConnectionCallbacks(this)
                    .addOnConnectionFailedListener(this)
                    .addApi(Plus.API)
                    .addScope(Plus.SCOPE_PLUS_LOGIN)
                    .build();
         btnSignIn = (SignInButton)findViewById(R.id.btn_sign_in);
         btnSignIn.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v)
                    {
                        if (!mGoogleApiClient.isConnecting()) {
                            mSignInClicked = true;
                            mGoogleApiClient.connect();
                        }
                    }
                });


     @Override
        public void onActivityResult(int requestCode, int resultCode, Intent data)
        {
            super.onActivityResult(requestCode, resultCode, data);
           if (requestCode == RC_SIGN_IN)
                {
                    if (resultCode != RESULT_OK)
                    {
                        mSignInClicked = false;
                    }

                    mIntentInProgress = false;

                    if (!mGoogleApiClient.isConnected()) {
                        mGoogleApiClient.reconnect();
                    }
                }


        }



@Override
    public void onConnected(Bundle bundle)
    {
        mSignInClicked = false;
        if (Plus.PeopleApi.getCurrentPerson(mGoogleApiClient) != null)
        {

            Person currentPerson = Plus.PeopleApi.getCurrentPerson(mGoogleApiClient);
            //Toast.makeText(Login_Activity.this,str_id,Toast.LENGTH_LONG).show();

            str_first_name = currentPerson.getDisplayName();
            google_id = currentPerson.getImage().getUrl();
            System.out.println("google_id==  "+google_id);
            str_email = Plus.AccountApi.getAccountName(mGoogleApiClient);
            str_mobile ="";
            int temp=currentPerson.getGender();
            if(temp==0)
            {
                str_gender="male";
            }
            else if(temp==1)
            {
                str_gender="female";
            }

            str_date_of_birth=currentPerson.getBirthday();
           // Toast.makeText(Login_Activity.this,str_gender,Toast.LENGTH_LONG).show();
           // Toast.makeText(Login_Activity.this,str_date_of_birth,Toast.LENGTH_LONG).show();



        }

    }

    @Override
    public void onConnectionSuspended(int i) {
        mGoogleApiClient.connect();
    }

    @Override
    public void onConnectionFailed(ConnectionResult connectionResult) {

        if (!mIntentInProgress) {
            if (mSignInClicked && connectionResult.hasResolution()) {
                // The user has already clicked 'sign-in' so we attempt to resolve all
                // errors until the user is signed in, or they cancel.
                try {
                    connectionResult.startResolutionForResult(this, RC_SIGN_IN);
                    mIntentInProgress = true;

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

    }

Android 用 Google+ プラットフォーム

于 2015-09-16T14:07:09.440 に答える
1

xml で onClick を削除して、レイアウトを作成しているフラグメントに入れてみませんか。

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
    view = inflater.inflate(R.layout.layout, container, false);
    login_button = ( com.google.android.gms.common.SignInButton ) view.findViewById(R.id.login_button);
    login_button.setOnClickListener( this );
    return view;
}

@Override
public void onClick( View v )
{
    switch ( v.getId() )
    {
        case R.id.login_button:
            mGoogleApiClient = new GoogleApiClient.Builder(this)
            .addConnectionCallbacks(this)
            .addOnConnectionFailedListener(this)
            .addApi(Plus.API)
            .addScope(Plus.SCOPE_PLUS_PROFILE)
            .build();
            mGoogleApiClient.connect();
            break;
    }
}
于 2015-09-16T14:10:51.450 に答える