简体   繁体   中英

App Closes On Clicking Google SIgn In Button

I was trying to integrate google sign in into my app. When I clicked the button, the app closes(not crashes). What's the mistake I'm making here? I Tried my best to follow what the google developers site told me. I apologise in advance for the long code.

My Java Code :

      import static com.google.android.gms.common.SignInButton.COLOR_DARK;

    public class User_Name extends AppCompatActivity implements
            GoogleApiClient.OnConnectionFailedListener{
        private PrefManager2 prefManager;
        SignInButton signInButton;
        String email, name;
        LoginButton loginButton;
        GoogleApiClient mGoogleApiClient;

        private static final int RC_SIGN_IN = 9001;
        SQLiteDatabase db;
        private GoogleSignInOptions googleSignInOptions;


        private static final String EMAIL_PATTERN = "^[a-zA-Z0-9#_~!$&'()*+,;=:.\"(),:;<>@\\[\\]\\\\]+@[a-zA-Z0-9-]+(\\.[a-zA-Z0-9-]+)*$";
        private Pattern pattern = Pattern.compile(EMAIL_PATTERN);
        private Matcher matcher; //validate email

        Button normalLogin;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);


            prefManager = new PrefManager2(this);
            if (!prefManager.isFirstTimeLaunch()) {
                launchHomeScreen(); //custom method
                finish();
            }


            setContentView(R.layout.activity_user__name);




            googleSignInOptions = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN).requestEmail().requestId().build();
            mGoogleApiClient  = new GoogleApiClient.Builder(this).enableAutoManage(this,this).addApi(Auth.GOOGLE_SIGN_IN_API,googleSignInOptions).build();

            SignInButton signInButton = (SignInButton) findViewById(R.id.sign_in_button); //google Integration
            signInButton.setColorScheme(COLOR_DARK);
            signInButton.setSize(SignInButton.SIZE_WIDE);


            signInButton.setScopes(googleSignInOptions.getScopeArray());


            signInButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient);
                    startActivityForResult(signInIntent, RC_SIGN_IN);
                }
            });

    //________________________________________________________________________________________________________________________


    //____________________________________________________________________________________________________







        }


        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            super.onActivityResult(requestCode, resultCode, data);


            if(requestCode == RC_SIGN_IN){
                GoogleSignInResult googleSignInResult = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
                GoogleSignInAccount googleSignInAccount = googleSignInResult.getSignInAccount();

                try{
                    email =  googleSignInAccount.getEmail();
                    name = googleSignInAccount.getDisplayName();

                    //-------------
                    Beacon_Database Beacon_Database = new Beacon_Database(User_Name.this);
                    db = Beacon_Database.getReadableDatabase();

                    //----------------try-----------




                    if(email.equals("")){
                        email = "None";
                    }

                    ContentValues values1 = new ContentValues();
                    values1.put("NAME",name);
                    values1.put("EMAIL",email);


                    db.insert("LOGIN",null,values1);

                    Toast.makeText(User_Name.this,email, Toast.LENGTH_LONG).show();

                }catch(NullPointerException exc){
                    Toast.makeText(User_Name.this,"Something Seems To Have Gone Wrong",Toast.LENGTH_LONG).show();
                }

            }
        }

        private void launchHomeScreen() {
            prefManager.setFirstTimeLaunch(false);
            Intent intent = new Intent(User_Name.this,UserLocation2.class);
            startActivity(intent);
            finish();
        }


        @Override
        public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
            AlertDialog.Builder alertdialog = new AlertDialog.Builder(User_Name.this);
            alertdialog.setPositiveButton("Okay", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialogInterface, int i) {
                    dialogInterface.dismiss();
                }
            });
            alertdialog.setTitle("Error");
            alertdialog.setMessage("Please Check Your Network Connection");
            alertdialog.show();
        }
}

my layout xml with the sign in button :

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    xmlns:fb="http://schemas.android.com/apk/res-auto"
    android:fitsSystemWindows="true">

    <LinearLayout
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingTop="56dp"
        android:background="@drawable/attempt"
        android:paddingLeft="24dp"
        android:paddingRight="24dp"
        android:weightSum="1">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="72dp"
           android:layout_marginBottom="16dp"
            android:layout_gravity="center_horizontal"
            android:textAppearance="@style/TextAppearance.AppCompat.Light.Widget.PopupMenu.Large"
            android:text="Beacon"
            android:fontFamily="casual"
            android:textColor="#e0e0e0"
            android:textStyle="normal|bold|italic"
            android:typeface="sans"
            android:textAllCaps="false"
            android:textSize="65sp"
            android:id="@+id/textView" />



        <android.support.design.widget.TextInputLayout
            android:id = "@+id/namewrapper"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="8dp"
            android:animateLayoutChanges="true"
            android:textColorHint="#ffffff"
            android:layout_marginBottom="8dp">

            <EditText android:id="@+id/input_name"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:inputType="textPersonName"
                android:animateLayoutChanges="true"
                android:textColorHint="#ffffff"
                android:textColor="#ffffff"
                android:hint="Name" />
        </android.support.design.widget.TextInputLayout>




        <android.support.design.widget.TextInputLayout
            android:id = "@+id/emailwrap"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="8dp"
            android:textColorHint="#ffffff"
            android:layout_marginBottom="8dp">
            <EditText android:id="@+id/input_email"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:inputType="textEmailAddress"
                android:hint="Email" />
        </android.support.design.widget.TextInputLayout>
        <ProgressBar
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:visibility="gone"
            android:id = "@+id/authProgress"/>





        <!-- Signup Button -->
        <Button
            android:id="@+id/btn_login"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="24dp"
            android:layout_marginBottom="24dp"
            android:padding="12dp"
            android:background="#004D40"
            android:textColor="#e0e0e0"
            android:text="Create Account"/>

        <View
            android:layout_width="match_parent"
            android:layout_height="1dp"
            android:background="#ffffff"/>

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="OR"
            android:layout_gravity="bottom|center"
            android:paddingTop="8dp"
            android:textSize = "40sp"
            android:textColor="#ffffff"
            android:fontFamily="casual" />





<com.google.android.gms.common.SignInButton
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id = "@+id/sign_in_button"


    />



    </LinearLayout>


</FrameLayout>

This may or may not be relevant but check that your Activity is not set as a SingleTask Activity.

Some devices will not correctly return from the Google UI/libraries when they are in a separate task as they cannot communicate over process boundaries.

Understanding Launch Mode

可能是因为您在launchHomeScreen()函数中使用了finish()方法

My response is pretty late but it might help someone. In my case I had android:noHistory set to true which was causing the activity stack to be erased and the onActivityResult call back was not getting triggered instead the app was refreshing. Just removing the property from activity in AndroidManifest did the trick.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM