2016-06-13 7 views
0

私は自分のアプリケーションでgoogleにサインアップしていて、そこに写真URL、電子メール、および表示名を取得しています。profile.getEmail()2つの文字列を1つの電子メールと別の空白で取得します。

問題はprofile.getEmail();が2つの文字列を返す/取得していることです。 1つは電子メールで、もう1つは空白です。ここで

は、私はそれらをサインアップしています方法は次のとおりです。

ここ
public void retrieveUserInfo() { 
     FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser(); 
     if (user != null) { 
      for (UserInfo profile : user.getProviderData()) { 

       // Id of the provider (ex: google.com) 
       providerId = profile.getProviderId(); 

       // UID specific to the provider 
       uid = profile.getUid(); 

       // Name, email address, and profile photo Url 
       name = profile.getDisplayName(); 
       email = profile.getEmail(); 
       photoUrl = profile.getPhotoUrl().toString(); 

      } 
     } 
    } 

、私はToastで電子メールの文字列を置いたときに、私が得た:

public class SignupActivity extends AppCompatActivity { 

    private static final int RC_SIGN_IN = 1; 
    GoogleApiClient mGoogleApiClient; 
    FirebaseAuth mAuth; 
    TextView appName; 
    ProgressDialog signinProgressDialog; 
    CoordinatorLayout coordinatorLayout; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_signup); 
//  Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
//  setSupportActionBar(toolbar); 

     signinProgressDialog = new ProgressDialog(SignupActivity.this); 

     coordinatorLayout = (CoordinatorLayout) findViewById(R.id.signupCoordinatorLayout); 

     // Configure Google Sign In 
     GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) 
       .requestIdToken(getString(R.string.o_auth_client_id)) 
       .requestEmail() 
       .requestProfile() 
       .requestId() 
       .build(); 

     // Build a GoogleApiClient with access to the Google Sign-In API and the 
     // options specified by gso. 
     mGoogleApiClient = new GoogleApiClient.Builder(this) 
       .enableAutoManage(this /* FragmentActivity */, new GoogleApiClient.OnConnectionFailedListener() { 
        @Override 
        public void onConnectionFailed(@NonNull ConnectionResult connectionResult) { 

        } 
       } /* OnConnectionFailedListener */) 
       .addApi(Auth.GOOGLE_SIGN_IN_API, gso) 
       .build(); 

     mAuth = FirebaseAuth.getInstance(); 

     findViewById(R.id.sign_in_button).setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       if (isNetworkAvailable()) { 
        signinProgressDialog.setMessage("Signing in..."); 
        signinProgressDialog.show(); 
        signIn(); 
       } else { 
        Snackbar snackbar = Snackbar 
          .make(coordinatorLayout, "No internet connection!", Snackbar.LENGTH_LONG); 
        snackbar.show(); 
        signinProgressDialog.dismiss(); 
       } 
      } 
     }); 

    } 

    private void signIn() { 
     Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient); 
     startActivityForResult(signInIntent, RC_SIGN_IN); 
    } 

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

     // Result returned from launching the Intent from GoogleSignInApi.getSignInIntent(...); 
     if (requestCode == RC_SIGN_IN) { 
      GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data); 
      if (result.isSuccess()) { 
       // Google Sign In was successful, authenticate with Firebase 
       GoogleSignInAccount account = result.getSignInAccount(); 
       firebaseAuthWithGoogle(account); 
      } else { 
       // Google Sign In failed, update UI appropriately 
       // ... 
      } 
     } 
    } 

    private void firebaseAuthWithGoogle(GoogleSignInAccount acct) { 
     Log.d("firebaseAuthWithGoogle", "firebaseAuthWithGoogle:" + acct.getId()); 

     AuthCredential credential = GoogleAuthProvider.getCredential(acct.getIdToken(), null); 
     mAuth.signInWithCredential(credential) 
       .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() { 
        @Override 
        public void onComplete(@NonNull Task<AuthResult> task) { 
         Log.d("signin_successful", "signInWithCredential:onComplete:" + task.isSuccessful()); 

         Intent mainActivityIntent = new Intent(SignupActivity.this, MainActivity.class); 
         mainActivityIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
         mainActivityIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK); 
         startActivity(mainActivityIntent); 
         signinProgressDialog.dismiss(); 

         // If sign in fails, display a message to the user. If sign in succeeds 
         // the auth state listener will be notified and logic to handle the 
         // signed in user can be handled in the listener. 
         if (!task.isSuccessful()) { 
          Log.w("signin_unsuccessful", "signInWithCredential", task.getException()); 
          Toast.makeText(SignupActivity.this, "Authentication failed.", 
            Toast.LENGTH_SHORT).show(); 
         } 
         // ... 
        } 
       }); 
    } 

    @Override 
    public void onBackPressed() { 
     finish(); 
     super.onBackPressed(); 
    } 

    private boolean isNetworkAvailable() { 
     ConnectivityManager connectivityManager 
       = (ConnectivityManager) SignupActivity.this.getSystemService(Context.CONNECTIVITY_SERVICE); 
     NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo(); 
     return activeNetworkInfo != null && activeNetworkInfo.isConnected(); 
    } 
} 

は、ここで私は必需品を取得しています方法です2つのトーストは、最初は電子メールを表示し、2つ目は空白でした。

私は実際に何が間違っているのか分かりません。

お知らせください。

申し訳ありません、質問が間違って書式設定されているようです。私はまだ初心者です。

+0

あなたはfirebaseは、文字列配列を返す意味ですか?どのように電子メールを宣言していますか?あなたはそれをデバッグしようとしましたか? – adolfosrs

答えて

1

retrieveUserInfo()のコードを変更すると、そのジョブが実行されました。

ここで変更したコードは次のとおりです。

public void retrieveUserInfo() { 
     FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser(); 
     if (user != null) { 
      // Id of the provider (ex: google.com) 
      providerId = user.getProviderId(); 

      // UID specific to the provider 
      uid = user.getUid(); 

      // Name, email address, and profile photo Url 
      name = user.getDisplayName(); 
      email = user.getEmail(); 
      photoUrl = user.getPhotoUrl().toString(); 

     } 
    } 
1

あなたはfor()ループを使用している可能性があります。これはおそらく問題を引き起こしています。

+0

forループを削除すると私の仕事ができました。 –

関連する問題