Firebase Auth:Android:无法显示用户电子邮件和照片

2024-04-17

我已在 Android 应用程序中添加 Firebase Auth,并且正在使用 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,""));

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

有人可以帮忙吗????


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

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

在您的登录活动中:

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服务。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Firebase Auth:Android:无法显示用户电子邮件和照片 的相关文章

  • AmazonServiceException:用户无权执行:dynamodb:DescribeTable 状态代码:400;错误代码:AccessDeniedException

    我原本以为这个问题是由于区域不匹配造成的 但是在更改区域后 在尝试此处找到的 Amazon AWS 示例时 我仍然遇到以下错误 DynamoDB映射器 https github com awslabs aws sdk android sam
  • Android SSL 无对等证书

    我有一个例外 没有同行证书 当我询问谷歌时 我得到了解决方案 我信任所有证书 但这个问题的答案是 它是不安全的 所以我给班级打电话 HostnameVerifier hostnameVerifier org apache http conn
  • MaterialComponents AlertDialog 文本颜色

    Reading MaterialComponents 主题警报对话框按钮 https stackoverflow com questions 52829954 materialcomponents theme alert dialog bu
  • 如何将视图动态添加到已在 xml 布局中声明的relativelayout?

    我宣布了一个RelativeLayout在 xml 布局文件中 现在我想添加Views从代码到现有布局 我添加了一个Button通过代码动态地更改为现有布局 如下所示 rLayout RelativeLayout findViewById
  • Firebase如何获取用户详细信息?

    我在我的应用程序中使用 Firebase 身份验证 并使用电子邮件和密码注册用户 当用户使用自己的帐户登录时 我也想获取其他用户的详细信息 与登录用户分开 我怎样才能得到这些信息 电子邮件 显示名称和 ID 特定于身份验证系统 等值可从Fi
  • Android如何让进度条(圆形)在按下按钮时覆盖全屏?

    我尝试在单击提交按钮时显示进度栏 数据加载完成后它将隐藏 但是 进度条没有覆盖全屏 相反 它被按钮覆盖 请参考截图 应该更容易理解我的意思 我想要实现的是屏幕截图的底部部分 Main4Activity java public class M
  • Onclick 不会在 CardView 上触发

    我有一个OnClickListener on a CardView 仅当我点击内容之外的区域 TextViews ImageViews 时 侦听器才起作用 我的内部也有一个线性布局CardView 我希望当我点击屏幕上的任意位置时它就能工作
  • Android:自动从项目包中删除未使用的图像

    我正在开发一个相当大的android项目 并且在drawable文件夹中有很多图像 其中许多图像未在项目中使用 因为它们已被替换 并且占用了宝贵的空间 有什么方法可以自动找到这些图像并删除它们 而不是搜索项目中的每个图像 我使用过的一些工具
  • sqlite 插入表中 select * from

    我需要在 Android 应用程序中将数据从一个表移动到另一个表 我想使用以下sql insert into MYTABLE2 select id STATUS risposta DATETIME now data ins from MYT
  • 从 DecorView@2da7146[MyActivity] 中找不到 ViewTreeLifecycleOwner

    从撰写更新后alpha 11 to alpha 12 or beta 01 每当我打开具有撰写视图的活动或片段时 我都会遇到此崩溃 我在用AppCompatActivity它实现了LifecycleOwner 所以这非常奇怪 java la
  • 在另一个 Intent 中发送 Intent

    也许我的处理方式是错误的 但我想在我自己的应用程序中响应我的 Android AppWidget 的点击事件并启动一个 Activity 当时我设置了PendingIntent我还有一个Intent我想在点击时启动它 我的onStartCo
  • Facebook PHP API 登录时抛出异常

    我尝试使用 Facebook Graph API 登录并获取用户信息 我用来获取用户信息的代码以前可以工作 但今天我尝试使用 Facebook 登录 但 Facebook API 抛出此错误 未定义的偏移量 1 home vendor fa
  • 尝试在空对象引用上调用虚拟方法“java.lang.String org.jsoup.nodes.Element.ownText()”

    我正在使用下面的代码来获取版本名称 from 应用商店通过使用 jsoup 我正在获取详细信息 但它引发了一些异常 我的代码是 public class ForceUpdateAsync extends AsyncTask
  • 错误:包 com.google.android.gms.appstate 不存在

    由于此错误 无法编译我的 android 项目 BaseGameUtils src main java com google example games basegameutils GameHelper java Error 32 39 e
  • ViewPager 的 Android Viewholder

    您好 我正在使用 ViewPager 但我现在想保留状态 而不是重新生成单元格 我注意到 viewpager 与 listviews 的自定义适配器非常相似 它们的功能类似 listview 在单元格不再出现在屏幕上后重新生成单元格中的数据
  • setKeyListener 将覆盖 setInputType 并更改键盘

    大家好 我在两个设备之间遇到问题 在实践中使用InputType和KeyListener我正在操纵一个EditText让它从数字键盘接收逗号和数字 有关更多背景信息 请检查我之前的question https stackoverflow c
  • Android 4 上的 html5 视频:全屏播放然后重定向到另一个网页 - 不起作用

    我正在为 Android 4 智能手机设计一个 html5 页面 其中包含一个 3gpp 或 mp4 视频 打开时必须自动全屏播放 当视频结束时应该重定向到另一个网址 一些谷歌搜索告诉我 Android 4 上不再允许自动播放 因此我选择显
  • Listview里面只有一个Element

    您好 我正在尝试将列表视图放入列表视图中的列表视图中 唯一的问题是只有第一个列表视图正确显示所有元素 此后的每个列表视图仅包含一个元素 UPDATE 创建我自己的不可滚动列表视图解决了这个问题 https stackoverflow com
  • 在运行时用Dagger添加Retrofit RequestInterceptor

    我正在使用匕首和改装 我用 Dagger 注入我的 Retrofit 服务 现在我想做一个授权请求来获取 accessToken 之后 我想使用请求拦截器来增强我的 api 模块 以便将此访问令牌用于将来的请求 我的想法是在收到访问令牌后使
  • C/C++ 通过 Android NDK 在 JNI 中看不到 Java 方法

    我正在尝试从使用 NDK 构建的 C 类文件调用 Java 方法 它不断抛出常见的 未找到非静态方法 错误并导致整个 Android 应用程序崩溃 下面的代码片段 有些东西可能不需要 但我按原样保留它们 因为焦点 问题在于refreshJN

随机推荐

  • clang:自定义属性在 AST 中不可见

    我按照官方手册中的描述在 clang 中实现了一个自定义属性 http clang llvm org docs InternalsManual html how to add an attribute http clang llvm org
  • VBA代码导入

    我有一个用 excel 做的 VBA 项目 我将有许多工作簿将使用相同的代码 并且如果我进行更改 我不想将代码复制到所有工作簿 是否有办法将代码放在一个中心位置 然后让所有工作簿访问该代码 是的 你有两个选择 1 将代码复制并粘贴到个人工作
  • 按钮触发单击事件两次

    似乎有时 但并非总是 我的按钮单击事件被触发两次 事实上 这种情况似乎有时会发生 但并非总是如此 这让我很困惑 这是我的按钮
  • 如何使用 PHP 获取表单身份验证票证的内容

    我需要在 PHP 中撤消以下 ASP Net 进程 以便可以获取票证中的用户名和到期日期 我已经解密了 3DES 加密 下面的步骤 3 但我不确定下一步需要做什么 解密得到的字符串是字节数组吗 我应该能够将其转换为ascii 吗 因为事实并
  • 如何访问symfony2全局帮助函数(服务)中的服务容器?

    这个问题一开始我不明白为什么我不能将变量传递给 symfony2 全局辅助函数 服务 但是感谢比我更聪明的人 我意识到我的错误是尝试在一个类中使用 security context 而该类没有没有注射所以 这是最终的结果 即有效的代码 我没
  • 最顶部和最底部的水平分隔线未显示在 ListView 中

    我正在使用列表视图 但最顶部和最底部的水平条不显示 为什么 我正在使用这个 android divider android drawable divider horizontal bright 添加虚拟页脚和页眉 listViewConta
  • 按月分组的 SQL 结果

    我正在尝试返回滚动 12 个月期间的一些结果 例如 MONTH IN OUT January 210 191 February 200 111 March 132 141 April 112 141 May 191 188 etc 如何将结
  • 在 Go 模板中使用包含内部范围 (helm)

    我有一个模板 可以使用以下命令渲染多次range迭代 我可以访问变量外部变量 例如 Release Name没有问题 但是 当我包含模板时 我无法让它工作 range key val Values resources annotations
  • jQuery 每个都返回 [object Object]

    我的问题是 html 变量返回如下所示的内容 object Object object Object object Object object Object object Object 而不是元素 我应该做什么不同的事情 var html
  • SwiftMailer 不发送邮件,为什么?

    SwiftMail 不发送我的电子邮件 而mail 确实有效 与 一样here https stackoverflow com questions 3552937 swiftmailer wont send mail but mail wi
  • mongodb,复制和错误:{“$err”:“不是master和slaveOk = false”,“code”:13435}

    我第一次尝试 mongo 副本集 我在 ec2 上使用 ubuntu 并启动了三个实例 我使用了每个实例的私有 IP 地址 我选择作为主要的 下面是代码 mongo host Private IP Address rs initiate r
  • 在 Go 泛型中,如何对联合约束中的类型使用通用方法?

    我试图了解 Go 泛型 v1 18 中类型联合约束的用法 这是我尝试过的代码 type A struct type B struct type AB interface A B func a A some bool return true
  • 配置Tomcat使用属性文件加载DB连接信息

    创建从属性文件读取配置参数的 Tomcat 部署的可接受做法是什么 如果能够提供 WAR 文件并指定客户端只需在特定目录中创建或编辑属性文件 那就太好了 这是一种比较常规的做事方式吗 还有比这更好的方法吗 我们经常通过提供 WAR 和 Co
  • 字大小及其指示

    请参阅下面关于各种指令集架构中的字长以及它与汇编语言的关系的问题 感谢您提供的所有帮助 先说几个事实 如有错误 请指正 处理器架构的字长表示 编辑 其中一些是错误的 请参阅下面 Seva 的帖子 每个寄存器的最大尺寸 每个内存地址的最大尺寸
  • 如何定义Titan Graph DB Vertex的数据类型?

    我正在使用 Titan 和 Blueprint API 创建图形数据表 我使用 HBase 作为后端 我知道如何定义关键索引的数据类型 Example TitanKey name graph makeType name name dataT
  • 如何创建可以分发或打包的可执行jar文件?

    我在用getdown https github com threerings getdown wiki创建更新 java 应用程序的方法 当我完成本教程后 我测试了它是否可以在命令行上运行 如下所示 java jar c downloads
  • android - 使用 glide 时图像质量较低

    我是 Android 开发新手 在我的应用程序中 我有一个horizontalScrollView包含图像 后来我一直使用Picasso从URL加载图像 然后我听说了 glide 所以我切换到 glide 现在我的图像加载速度很快 但图像质
  • 我可以在 DBIx::Class 中漂亮地打印 DBIC_TRACE 输出吗?

    将 DBIC TRACE 环境变量设置为 true BEGIN ENV DBIC TRACE 1 生成非常有用的输出 特别是显示正在执行的 SQL 查询 但 SQL 查询全部在一行中 有没有办法将它推入某种 sql tidy 例程以更好地格
  • 尝试使用 JMeter API 生成 JMeter 测试计划 (jmx):从代码创建的 jmeter jmx 文件与 JMeter 创建的文件不匹配

    我正在尝试使用 jmeter java api 创建 jmeter jmx 文件 这就是我所做的 gui jmx 使用 jmeter gui 应用程序创建一个参考 jmx 文件 我可以将其进行比较 对于测试计划 我仅添加一个线程组和线程组内
  • Firebase Auth:Android:无法显示用户电子邮件和照片

    我已在 Android 应用程序中添加 Firebase Auth 并且正在使用 Facebook 和 Google 登录 登录工作正常 现在 我想从用户的 Facebook 帐户或 Google 帐户 以用户选择登录的为准 检索用户个人资