【问题标题】:How to retrieve UID from firebase and add it to child of firebase DB如何从firebase检索UID并将其添加到firebase DB的子级
【发布时间】:2017-03-28 17:44:11
【问题描述】:

首先,我对 firebase 数据库非常陌生。我正在研究如何从 firebase 检索当前的 UID(即当前登录的)并将其与整个 oncreate 中的值一起插入到 firebase 的子项中。

我正在尝试推送我当前的 UID,它对 Firebase 的价值。我无法将它推到火力基地。这是我的火力基地结构:

(例如,UID Fo2SfEfryWEjmxr4yIQwM5LQQx2and value '720'in fire base)

尝试后,我仍然无法获取以下代码来检索 UID。我在使用(new ValueEventListener() 以及这条线路时遇到了问题。

Map<String, Queue> data = postSnapshot.getValue(new GenericTypeIndicator<Map<String, Queue>>() {});

这是我的 onCreate 供参考

    mRef = new Firebase("https://sunwayfinancequeue.firebaseio.com/");
    mRef.child("UserQueue");
    mRef.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot snapshot) {
            for (DataSnapshot postSnapshot : snapshot.getChildren()) {
                Queue queue = postSnapshot.getValue(Queue.class);
                System.out.println(Queue.getTotalqueue() + " - " + Queue.getServingqueue());
                Map<String, Queue> data = postSnapshot.getValue(new GenericTypeIndicator<Map<String, Queue>>() {});
                Map.Entry<String, Queue> entry = data.entrySet().iterator().next();
                String uid = entry.getKey();
                Log.d("Firebase UID ", uid);

            }
        }

        @Override
        public void onCancelled(FirebaseError firebaseError) {
            System.out.println("The read failed: " + firebaseError.getMessage());

        }
    });

这是我的构造函数:

public class Queue {

private static double servingqueue;
private static double totalqueue;
private static String uid;

public Queue(Double servingqueue, Double totalqueue) {
    Queue.servingqueue = servingqueue;
    Queue.totalqueue = totalqueue;

}

public static double getServingqueue() {
    return servingqueue;
}

public static void setServingqueue(double servingqueue) {
    Queue.servingqueue = servingqueue;
}

public static double getTotalqueue() {
    return totalqueue;
}

public static void setTotalqueue(double totalqueue) {
    Queue.totalqueue = totalqueue;
}

public static String getUid() {
    return uid;
}

public static void setUid(String uid) {
    Queue.uid = uid;
    }
}

【问题讨论】:

    标签: java android firebase firebase-realtime-database


    【解决方案1】:

    您使用的是旧版Firebase Database SDK, 2.5.x。如果您刚刚开始使用数据库,最好使用新的9.x.x SDK,特别是如果您使用来自新 SDK 的 Firebase 身份验证。如果您在同一构建中使用新旧 SDK,您可能会遇到问题。请参阅Upgrade Guide

    【讨论】:

    • 谢谢。我正在使用最新的compile 'com.google.firebase:firebase-auth:9.8.0' compile 'com.google.firebase:firebase-database:9.8.0'
    • 但是鉴于您发布的代码,您的构建依赖项中还必须有compile 'com.firebase:firebase-client-android:2.5.x'。那是旧版 SDK。
    • 这可以解释某些事情不起作用。感谢您的关注。但是最新的com.google.firebase:firebase-database:9.8.0 能够做出我在商店中的更改吗?
    • 是的,在您向Queue 添加无参数构造函数后,它应该可以工作。我不确定您对队列的两个字段使用static。这可能是个问题。
    【解决方案2】:

    您想使用 Firebase 身份验证。查看此链接为您的 Android 应用设置 Firebase 身份验证:

    https://firebase.google.com/docs/auth/android/start/

    此链接将帮助您管理用户并向您展示如何获取当前用户的 UID:

    https://firebase.google.com/docs/auth/android/manage-users

    一旦您设置了 Firebase 身份验证,您将使用这段代码来获取当前用户的 UID。

    FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
    if (user != null) {
        String UID = user.getUid();
    } else {
        // No user is signed in
    }
    

    【讨论】:

    • 感谢您的回复,我不久前设置了firebase auth。但是我遇到了将 uid 连同我存储的值一起发送回 firebase db 的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-10
    • 2020-03-14
    • 2020-12-13
    • 2020-05-13
    • 2020-04-08
    • 2016-12-09
    相关资源
    最近更新 更多