android - Firebase 身份验证 : Android: Unable to display user email and photo

标签 android facebook firebase-authentication google-signin

我已在 Android 应用中添加了 Firebase Auth,并且正在使用 Facebook 和 Google 登录。登录工作正常。现在,我想从用户的 Facebook 帐户或 Google 帐户(以用户选择登录的为准)检索用户个人资料信息,并在用户个人资料 Activity 中显示该信息。我能够检索并显示用户名和用户 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,""));

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

谁能帮忙吗????

最佳答案

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

        }

确保您已将 picasso 依赖项添加到您的 gradle 中。

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

或者您可以使用意向服务,这肯定有效:

在您的登录 Activity 中:

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

更新2

有一种 firebase 方法..及其最简单的方法。

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

FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
TextView email;

email.setText(""+ user.getEmail());

不需要sharedPrefrence或intent服务。

关于android - Firebase 身份验证 : Android: Unable to display user email and photo,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38843758/

相关文章:

ios - Phonegap Facebook 插件没有响应

java - 为什么Android更喜欢静态类

android - React Native on Android : Unable to determine the current character, 它不是字符串、数字、数组或对象

android - 在三星 Galaxy S 上调用 RingTonePreference 时出现 NullPointerException

android - 应用程序在 FirebaseAuth.DefaultInstance 之后崩溃

twitter - 如何在 React Native 中使用 Firebase Twitter 身份验证?

node.js - 如何在 NodeJS 中更新 Firebase 身份验证的电话号码?

android - 针对不同 Activity 的 Dagger 注入(inject)

iOS Facebook SDK 权限未经审核

ios - 如何在生产中为实时 iOS 应用程序添加额外权限?