应用关闭点击Google标志按钮

时间:2017-02-24 14:40:25

标签: android googlesigninapi

我试图将google登录整合到我的应用中。当我点击按钮时,应用程序关闭(不会崩溃)。我在这里犯的错误是什么?我尽力遵循谷歌开发者网站告诉我的内容。我提前为长代码道歉。

我的Java代码:

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

我的布局xml带有登录按钮:

<?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>

3 个答案:

答案 0 :(得分:5)

这可能相关或不相关,但请检查您的活动是否未设置为SingleTask活动。

某些设备在单独的任务中无法从Google UI /库正确返回,因为它们无法通过流程边界进行通信。

Understanding Launch Mode

答案 1 :(得分:1)

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

答案 2 :(得分:1)

我的回复很晚,但可能会对某人有所帮助。在我的情况下,我将android:noHistory设置为true,这导致活动堆栈被擦除,并且onActivityResult回调没有触发,而是应用程序正在刷新。只需从AndroidManifest的活动中删除该属性即可达到目的。