我试图将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>
答案 0 :(得分:5)
这可能相关或不相关,但请检查您的活动是否未设置为SingleTask活动。
某些设备在单独的任务中无法从Google UI /库正确返回,因为它们无法通过流程边界进行通信。
答案 1 :(得分:1)
这可能是因为您在finish()
函数中使用launchHomeScreen()
方法
答案 2 :(得分:1)
我的回复很晚,但可能会对某人有所帮助。在我的情况下,我将android:noHistory设置为true,这导致活动堆栈被擦除,并且onActivityResult回调没有触发,而是应用程序正在刷新。只需从AndroidManifest的活动中删除该属性即可达到目的。