【问题标题】:Facebook profile picture is not loading in my appFacebook 个人资料图片未在我的应用中加载
【发布时间】:2021-12-30 00:56:27
【问题描述】:

我已经实现了 Facebook SDK 和 Firebase 实现。我正在尝试显示使用 Facebook 登录的用户的姓名、电子邮件和个人资料图片。姓名和电子邮件正在加载,但个人资料图片未加载。

代码如下:

Kotlin 代码

auth= FirebaseAuth.getInstance()
        val currentuser = auth.currentUser
        email.text=currentuser?.email
        val photourl = currentuser?.photoUrl.toString()
        Log.d("url","URL of profile image is $photourl")
        Glide.with(this).load(currentuser?.photoUrl.toString()).into(profile_image)

XML 代码

  <ImageView
      android:id="@+id/profile_image"
      android:layout_width="150dp"
      android:layout_height="150dp"
      android:layout_marginTop="70dp"
      app:layout_constraintEnd_toEndOf="parent"
      app:layout_constraintHorizontal_bias="0.5"
      app:layout_constraintStart_toStartOf="parent"
      app:layout_constraintTop_toTopOf="parent"
      tools:srcCompat="@tools:sample/avatars" />

我还附上了活动的图片:

【问题讨论】:

    标签: android firebase kotlin firebase-authentication


    【解决方案1】:

    由于以下代码行,您没有获得正确的图片 URL:

    val photourl = currentuser?.photoUrl.toString()
    

    这是因为您试图从 FirebaseUser 对象获取 URL。当您使用 Facebook 对用户进行身份验证时,currentuser 对象内的 photoUrl 字段不会被填充。为了能够实际获取该 URL,您需要使用以下代码行:

    val auth = FirebaseAuth.getInstance()
    auth.currentUser?.apply {
        for (userInfo in providerData) {
            if (userInfo.providerId == "facebook.com") {
                val photoUrl = userInfo.photoUrl
                Log.d("TAG", photoUrl.toString())
            }
        }
    }
    

    因此,您必须从 UserInfo 对象而不是 FirebaseUser 对象获取 URL。

    【讨论】:

    • 我仍然没有获得个人资料网址。我得到这个网址graph.facebook.com/1984789791730323/picture
    • 这很可能意味着用户在他/她的 Facebook 帐户中没有设置图像。你能告诉我们个人资料图片所在的 Facebook 帐户吗?
    • 好的,看看我的个人资料facebook.com/Ishan301
    • 如果您尝试使用Log.d("TAG", userInfo.getUid()),您是否获得了经过身份验证的用户的正确ID? userInfo.getDisplayName() 也会发生这种情况吗?
    • 我已经勾选了你的答案?
    【解决方案2】:

    使用 FirebaseUser 对象

    private FirebaseUser user;
    FirebaseAuth auth = FirebaseAuth.getInstance();
    user = auth.getCurrentUser();
    

    现在调用 - user.getPhotoUrl()

    Glide.with(getApplicationContext()).load(user.getPhotoUrl()).into(userImage);
    

    【讨论】:

    • 我也做过同样的事情。只是你用过java,我用过kotlin
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-28
    • 1970-01-01
    • 2011-07-08
    • 1970-01-01
    • 2017-09-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多