gpt4 book ai didi

android - 适用于 Android 的 Google 登录 : Cannot resolve RC_SIGN_IN

转载 作者:行者123 更新时间:2023-11-29 14:29:39 24 4
gpt4 key购买 nike

我正在尝试从移动应用程序向后端服务器进行身份验证。我正在关注此文档。 https://developers.google.com/identity/sign-in/android/sign-in但是,存在一些错误。 RC_SIGN_INupdateUI() 无法解析。

我的代码是这样的

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {

...

GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestEmail()
.build();

mGoogleSignInClient = GoogleSignIn.getClient(this, gso);

mSignInButton = findViewById(R.id.sign_in_button);
mSignInButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(MainActivity.this, "Hello", Toast.LENGTH_LONG).show();
Intent signIntent = mGoogleSignInClient.getSignInIntent();
startActivityForResult(signIntent, RC_SIGN_IN);
}
});


@Override
protected void onStart() {
GoogleSignInAccount account = GoogleSignIn.getLastSignedInAccount(this);
updateUI(account);
super.onStart();
}


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

// Result returned from launching the Intent from GoogleSignInClient.getSignInIntent(...);
if (requestCode == RC_SIGN_IN) {
// The Task returned from this call is always completed, no need to attach
// a listener.
Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data);
handleSignInResult(task);
}
}


private void handleSignInResult(Task<GoogleSignInAccount> completedTask) {
try {
GoogleSignInAccount account = completedTask.getResult(ApiException.class);
String idToken = account.getIdToken();

// Send Id Token to the backend and validate here

// Signed in successfully, show authenticated UI.
updateUI(account);
} catch (ApiException e) {
// The ApiException status code indicates the detailed failure reason.
// Please refer to the GoogleSignInStatusCodes class reference for more information.
Log.w(TAG, "signInResult:failed code=" + e.getStatusCode());
updateUI(null);
}
}

更新

现在按钮本身不起作用。

xml

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true">

<!-- Include the main content -->
<FrameLayout
android:id="@+id/content_frame"
android:layout_width="match_parent"
android:layout_height="match_parent">


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

<android.support.v4.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="match_parent">

<TextView
android:id="@+id/text_view_result"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#000"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />

</android.support.v4.widget.NestedScrollView>

</FrameLayout>

<!-- Navigation bar -->
<android.support.design.widget.NavigationView
android:id="@+id/nav_view"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
android:fitsSystemWindows="true"
app:menu="@menu/navigation_menu"/>

</android.support.v4.widget.DrawerLayout>

我该如何解决这个问题?

最佳答案

您只需将 RC_SIGN_IN 替换为一个 int 值即可。它可以是任何东西,但不能使用 1 作为它的值。操作如下:

startActivityForResult(signIntent, 1);

并将 Activity 结果中的 if 代码更改如下:

if (requestCode == 1)

同时将登录按钮点击代码更改为此(删除 switch cases):

mSignInButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
signIn();
}
}
});

这是因为您正在调用按钮的单击方法,然后再次检查是否单击了同一个按钮,这就是我认为它不起作用的原因。

现在对于updateUI方法,这个方法应该由你来定义。基本上,这是为了让您的应用程序更改用户登录应用程序时向用户显示的内容。如果您想在 signedIn() 时打开新 Activity ,您可以通过更改 Activity 结果和 onstart 事件中的 updateUI(account) 来使用 Intent一个 Intent :

startActivity(new Intent(MainActivity.this, SecondActivity.class));

并在 SecondActivity 中获取登录的帐户:

GoogleSignInAccount account = GoogleSignIn.g etLastSignedInAccount(this); //use this in onCreate

关于android - 适用于 Android 的 Google 登录 : Cannot resolve RC_SIGN_IN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54603331/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com