【问题标题】:Firebase Auth: Android: Unable to display user email and photoFirebase Auth:Android:无法显示用户电子邮件和照片
【发布时间】:2016-12-15 02:06:14
【问题描述】:

我在我的 Android 应用中添加了 Firebase 身份验证,并且我正在使用 Facebook 和 Google 登录。登录工作正常。现在我想从用户的 Facebook 帐户或 Google 帐户(无论用户选择登录)中检索用户个人资料信息,并在用户个人资料活动中显示该信息。我能够检索并显示用户名和用户 UID,但是,尽管已检索,但用户电子邮件和用户照片并未显示。

这是我检索用户信息的方式 (LoginActivity.java):

authStateListener = new FirebaseAuth.AuthStateListener() {
            @Override
            public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {

                FirebaseUser user = firebaseAuth.getCurrentUser();

                if (user != null) {
                    //User is signed in

                    for (UserInfo userInfo : user.getProviderData()){

                        String user_name = userInfo.getDisplayName();
                        String user_email = userInfo.getEmail();
                        Uri user_img = userInfo.getPhotoUrl();
                        String user_id = userInfo.getUid();

                        SharedPreferences preferences = getSharedPreferences(UserInfoConstants.STRING_NAME,0);
                        SharedPreferences.Editor editor = preferences.edit();
                        editor.putString(UserInfoConstants.KEY_USER_NAME, user_name);
                        editor.putString(UserInfoConstants.KEY_USER_EMAIL, user_email);
                        editor.putString(UserInfoConstants.KEY_USER_ID, user_id);
                        editor.putString(UserInfoConstants.KEY_USER_IMG, user_img != null ? user_img.toString() : null);
                        editor.apply();
                    }

                } else {
                    //User is signed out
                    return;
                }
            }
        };

这是显示用户信息的方式 (ProfileActivity.java):

SharedPreferences preferences = getSharedPreferences(LoginActivity.UserInfoConstants.STRING_NAME,0);

        String user_img_uri = preferences.getString(LoginActivity.UserInfoConstants.KEY_USER_IMG,"");

        if (user_img_uri.isEmpty()){

            userImgView.setImageResource(R.drawable.com_facebook_profile_picture_blank_portrait);
        } else {

            userImgView.setImageBitmap(getImageBitmap(user_img_uri));
        }
        userName.setText(preferences.getString(LoginActivity.UserInfoConstants.KEY_USER_NAME,""));
        userEmail.setText(preferences.getString(LoginActivity.UserInfoConstants.KEY_USER_EMAIL,""));
        userId.setText("ID: " + preferences.getString(LoginActivity.UserInfoConstants.KEY_USER_ID,""));

我对此进行了很多搜索,但无法获得相同的解决方案。

谁能帮忙????

【问题讨论】:

    标签: android facebook firebase-authentication google-signin


    【解决方案1】:

    Uri 引用始终为null。尝试将其存储为这样的字符串:

    String uri =  userInfo.getPhotoUrl().toString;
    

    并将其传递给首选项,然后像这样设置:

    String fbImage = pref.getString("ImageUri", "");
    
    if (fbImage != null && !fbImage.isEmpty()) {
                Picasso.with(getApplicationContext())
                        .load(fbImage)
                        .placeholder(R.drawable.img_circle_placeholder)
                        .resize(avatarSize, avatarSize)
                        .centerCrop()
                        .transform(new CircleTransformation())
                        .into(ImageViewObject);
    
            }
    

    确保你在你的 gradle 中添加了 picasso 依赖项。

     compile 'com.squareup.picasso:picasso:2.3.2'
    

    对于电子邮件ID:

    String email = pref.getString("email", null);
    
    //try to check here
    Log.w("email", ""+email);
    
    if(email != null && !email.isEmpty()){
       textEmail.setText(""+email);
    }
    

    或者您可以使用意图服务,这是肯定的:

    在您的登录活动中:

    Intent intent = new Intent(this, MainActivity.class);
    intent.putExtra("email_id", email_id);
    startActivity(intent);
    finish();
    
    and in your mainActivity:
    
    Intent intent = getIntent();
    String email = intent.getStringExtra("email_id");
    
    textEmail.setText(""+email);
    

    update-2

    有一种 firebase 方法.. 也是最简单的方法。

    在您要检索数据的第二个活动中编写此代码..

    FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
    TextView email;
    
    email.setText(""+ user.getEmail());
    

    不需要 sharedPrefrence 或 Intent 服务。

    【讨论】:

    • 嘿,非常感谢!它工作得很好!请告诉我如何获取用户的电子邮件 ID。我正在检索电子邮件 ID,但它没有显示出来。
    • userinfo.getEmail() 本身返回一个String 值。我已经尝试过调试,我在LoginActivity.java 中获得了价值
    猜你喜欢
    • 2016-11-18
    • 2020-05-06
    • 1970-01-01
    • 1970-01-01
    • 2015-02-22
    • 2017-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多